SQL - Consulta MySQL

 
Vista:
Imágen de perfil de Ferney
Val: 7
Ha disminuido su posición en 8 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta MySQL

Publicado por Ferney (4 intervenciones) el 09/07/2019 19:01:36
Buenas tardes tengan todos.

Tengo una consulta, por favor ayúdenme a resolverla.

Si quiero llamar de una base de datos todas las direcciones de Bogota pero que la calle no sea mayor a la 196, como lo haría?
Tengo la siguiente consulta;
SELECT *
FROM `tabla` WHERE ciudad LIKE 'bogot%' AND direccion NOT REGEXP '196|197|198|199|200|201|202|203|204'
Esta consulta me sirve pero también me omite registros con of 202, ap 201, etc.

Como puedo evitar eso.

Muchas gracias por su colaboración y buen día.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Felix
Val: 8
Ha aumentado su posición en 9 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta MySQL

Publicado por Felix (3 intervenciones) el 09/07/2019 19:10:26
Saludos Ferney!

Lo que buscas lo logras con operados comparativos.

Busca la documentación para que te empapes del tema.

1
SELECT * FROM 'tabla' WHERE ciudad LIKE 'bogot%' AND direccion < 197

creo que con eso bastaría, pero prueba y nos cuentas como te va.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ferney
Val: 7
Ha disminuido su posición en 8 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta MySQL

Publicado por Ferney (4 intervenciones) el 09/07/2019 19:17:40
Hola Felix, gracias por responder.

Su respuesta no me sirve porque validaría si un numero es mayor que 197, pero una dirección se coloca en string, ej: Cra 27 # 198-XX. o Cll 212 # 74-XX

Estas direcciones no debería mostrarla porque pertenecen a una calle mayor a la 196.

Hasta luego.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 8
Ha aumentado su posición en 23 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta MySQL

Publicado por miguelZ (4 intervenciones) el 09/07/2019 19:24:58
Que tal,

Agrega la estructura de la tabla a consultar, asi como ejemplo de datos contenidos, y la respuesta
que esperas obtener en la consulta.

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Consulta MySQL

Publicado por leonardo_josue (1173 intervenciones) el 09/07/2019 22:44:51
Hola Ferney:

Hay varias formas de resolver tu problema, el detalle es que la expresión regular que estás poniendo está mal planteada, pero veamos si esto te sirve.

Supongamos que tienes estos datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT * FROM tabla;
+------+----------+
| id   | campo    |
+------+----------+
|    1 | 194      |
|    2 | 195      |
|    3 | 196      |
|    4 | 197      |
|    5 | algo 194 |
|    6 | 195 algo |
|    7 | algo 196 |
|    8 | 197 algo |
+------+----------+
8 rows in set (0.02 sec)

Entonces, aplicando la consulta que pones tenemos esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT *
    -> FROM tabla
    -> WHERE
    ->   campo NOT REGEXP '196|197|198|199|200|201|202|203|204';
+------+----------+
| id   | campo    |
+------+----------+
|    1 | 194      |
|    2 | 195      |
|    5 | algo 194 |
|    6 | 195 algo |
+------+----------+
4 rows in set (0.00 sec)

Si entendí bien, el caso de 7 y 8 NO QUIERES QUE SE FILTREN, sino que aparezcan en la consulta, entonces, puedes hacer lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT *
    -> FROM tabla
    -> WHERE
    ->   (CONCAT('', campo * 1) = campo and campo < 196)
    ->   OR CONCAT('', campo * 1) != campo;
+------+----------+
| id   | campo    |
+------+----------+
|    1 | 194      |
|    2 | 195      |
|    5 | algo 194 |
|    6 | 195 algo |
|    7 | algo 196 |
|    8 | 197 algo |
+------+----------+
6 rows in set, 8 warnings (0.00 sec)

En este caso haces una comparación por "partes", en la primera parte, aplicas una comparación campo < 196 (como planteaba Felix, PERO APLICADA SÓLO A LOS CAMPOS QUE CONTIENEN SÓLO NÚMEROS). El uso del CONCAT es un truco algo "tramposo" que te permite MySQL para hacer estas comparaciones.

Si quieres hacerlo con Expresiones Regulares, tienes que hacerlo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT *
    -> FROM tabla
    -> WHERE
    ->   campo NOT REGEXP '^196$|^197$|^198$|^199$|^200$|^201$|^202$|^203$|^204$';
+------+----------+
| id   | campo    |
+------+----------+
|    1 | 194      |
|    2 | 195      |
|    5 | algo 194 |
|    6 | 195 algo |
|    7 | algo 196 |
|    8 | 197 algo |
+------+----------+
6 rows in set (0.00 sec)

Es decir, te falta marcar EL INICIO Y EL FIN DE LA CADENA, en otras palabras la expresión regular que tu pones es equivalente buscar una cadena QUE CONTENGA cada una de las cifras que pones, INDEPENDIENTEMENTE SI SE TIENEN MÁS CARACTERES AL INICIO O AL FIN DE LA CADENA. Poniendo ^ y $ especificas que SEA EXACTAMENTE IGUAL a la cadena, ¿se entiende la diferencia?

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ferney
Val: 7
Ha disminuido su posición en 8 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta MySQL

Publicado por Ferney (4 intervenciones) el 09/07/2019 23:07:04
Muchas gracias Leonardo, voy a realizar pruebas con lo que me comentas.

Muchas gracias por su tiempo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ferney
Val: 7
Ha disminuido su posición en 8 puestos en SQL (en relación al último mes)
Gráfica de SQL

Consulta MySQL

Publicado por Ferney (4 intervenciones) el 09/07/2019 23:33:18
Hola Leonardo, probé pero no me funciono. Tal vez no me he hecho entender, disculpas por eso.
Es lo siguiente:
Si tengo la siguiente tabla:
+------+--------------------------------+
| id | campo |
+------+--------------------------------+
| 1 | Calle 23 # 161-12 |
| 2 | Kra 15 # 100-12 |
| 5 | Calle 100 # 25-12 of 202 |
| 6 | Cl 199 # 12-25 |
| 7 | Kra 7 # 198-12 of 303 |
| 8 | Kra 12 # 201 - 03 |
+------+--------------------------------+

Quiero una consulta que me muestre lo siguiente:

+------+--------------------------------+
| id | campo |
+------+--------------------------------+
| 1 | Calle 23 # 161-12 |
| 2 | Kra 15 # 100-12 |
| 5 | Calle 100 # 25-12 of 202 |
+------+--------------------------------+

Me saca las 3 ultimas porque pertenecen a una calle mayor de 196

Con mi consulta quedaría así:

+------+--------------------------------+
| id | campo |
+------+--------------------------------+
| 1 | Calle 23 # 161-12 |
| 2 | Kra 15 # 100-12 |
+------+--------------------------------+

Sacaría el dato de id 5 porque la oficina es la 202 pero no debería ya que la calle es la 100

Muchas gracias por su tiempo y su colaboración, es usted muy amable.
Si conoce una consulta que haga lo que pretendo, le agradezco infinitamente.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar