Sentencia SQL

Iniciado por rubcr, 28 Abril 2020, 21:13 PM

0 Miembros y 1 Visitante están viendo este tema.

rubcr

Buenas a todos.
Tengo un problema con una sentencia, la cual tiene que obtener la latitud y longitud de todas las antenas de la provincias que empiecen por vocal.

La selección que tengo es la siguiente:
SELECT lat, long FROM antena_telefonicas WHERE provincia LIKE '[aeiou]%';
El problema es que no me devuelve ningún dato, la sentencia no genera ningún error, pero no da datos.
El problema creo que está en el LIKE pero no sé cuál es.

Espero que alguien sepa ayudarme.
Un saludo.

Carloswaldo

¿De qué motor de base de datos estamos hablando?

Me parece que LIKE no es para expresiones regulares. Al menos no lo es en PostgreSQL donde usaría SIMILAR TO o '~'.

rubcr

Cita de: Carloswaldo en 28 Abril 2020, 21:25 PM
¿De qué motor de base de datos estamos hablando?

Me parece que LIKE no es para expresiones regulares. Al menos no lo es en PostgreSQL donde usaría SIMILAR TO o '~'.
En HeidiSql

EdePC

MySQL si permite utilizar Expresiones Regulares (RLIKE), pero si las usas mejor evitar los comodines de LIKE como % y _

Código (sql) [Seleccionar]
SELECT lat, long FROM antena_telefonicas WHERE provincia RLIKE '^[aeiou]';

MySQL Documentación (versión vieja 5.0, única en español) pág.: 176
http://downloads.mysql.com/docs/refman-5.0-es.a4.pdf

SQLServer por su parte ya incluye "expresiones regulares" que en realidad extiende más sus Comodines en LIKE
Código (sql) [Seleccionar]
SELECT lat, long FROM antena_telefonicas WHERE provincia LIKE '[aeiou]%';

Referencia:
https://www.sqlservertutorial.net/sql-server-basics/sql-server-like/

rubcr

Cita de: EdePC en 28 Abril 2020, 22:02 PM
MySQL si permite utilizar Expresiones Regulares (RLIKE), pero si las usas mejor evitar los comodines de LIKE como % y _

Código (sql) [Seleccionar]
SELECT lat, long FROM antena_telefonicas WHERE provincia RLIKE '^[aeiou]';

MySQL Documentación (versión vieja 5.0, única en español) pág.: 176
http://downloads.mysql.com/docs/refman-5.0-es.a4.pdf

SQLServer por su parte ya incluye "expresiones regulares" que en realidad extiende más sus Comodines en LIKE
Código (sql) [Seleccionar]
SELECT lat, long FROM antena_telefonicas WHERE provincia LIKE '[aeiou]%';

Referencia:
https://www.sqlservertutorial.net/sql-server-basics/sql-server-like/
Entonces atendiendo a las sentencias que has escrito para mi sería válida la segunda de ellas?

Carloswaldo

Cita de: rubcr en 28 Abril 2020, 22:13 PM
Entonces atendiendo a las sentencias que has escrito para mi sería válida la segunda de ellas?

La segunda es para SQL Server.

Cita de: rubcr en 28 Abril 2020, 21:45 PM
En HeidiSql

HeidiSql no es el motor, es un programa para conectarse a un motor de base de datos. Aunque muy probablemente estamos hablando de MySQL (o derivados) entonces.
Si es así tendrías que usar la 1era sentencia que mostró EdePC.

rubcr

Cita de: Carloswaldo en 28 Abril 2020, 22:18 PM
La segunda es para SQL Server.

HeidiSql no es el motor, es un programa para conectarse a un motor de base de datos. Aunque muy probablemente estamos hablando de MySQL (o derivados) entonces.
Si es así tendrías que usar la 1era sentencia que mostró EdePC.
Y en el caso por ejemplo que fuera que la provincia no empezase ni acabase por consonante como sería la sintaxis?

EdePC

Le has dado su leída al PDF que puse antes (pág.: 176)? Tienes que combinar ^ para forzar empezar con, [aeiou] que serán las vocales, luego un .* para decir cualquier otro conjunto de caracteres y finalizar con [aeiou]$ para decir que debe terminar en vocal

Código (sql) [Seleccionar]
RLIKE '^[aeiou].*[aeiou]$'

rubcr

Cita de: EdePC en 29 Abril 2020, 00:23 AM
Le has dado su leída al PDF que puse antes (pág.: 176)? Tienes que combinar ^ para forzar empezar con, [aeiou] que serán las vocales, luego un .* para decir cualquier otro conjunto de caracteres y finalizar con [aeiou]$ para decir que debe terminar en vocal

Código (sql) [Seleccionar]
RLIKE '^[aeiou].*[aeiou]$'
De acuerdo muchas gracias amigo.
Ahora tengo cuestión: siendo C el numero de ciudades de la tabla y P el numero de provincias devuelve la diferencia entre los dos valores.
Entiendo que hay que hacer una sentencia que cuente el numero de ciudades, el numero de provincias y que se resten los dos valores, pero no entiendo como puedo hacerlo.

EdePC

Depende del contexto del ejercicio, como que instrucciones permite utilizar, si se puede usar variables o subconsultas, etc

Teniendo en cuenta que en MySQL es válido hacer una simple resta de 2-5 para obtener -3 (pág.: 596 del PDF):

Código (sql) [Seleccionar]
SELECT 2 - 5

- Se pueden hacer subconsultas como se indica en la pág.: 596 en adelante:

Código (sql) [Seleccionar]
SELECT ABS( ( SELECT COUNT(*) FROM ciudades) - ( SELECT COUNT(*) FROM provincias) )

- El ABS() es para obtener siempre un número positivo (pág.: 597)

Pero dado que tu ejercicio menciona un C y un P,  debe hacer uso de algo más, quizá variables (pág.: 510)