uso por operador iniciales comodines buscar mysql sql select

mysql - por - Consulta SQL para verificar si un nombre comienza y termina con una vocal



sql like comodines (16)

Podría subscribir el primer y el último carácter y compararlo con la palabra clave IN,

WHERE SUBSTRING(NAME,1,1) IN (a,e,i,o,u) AND SUBSTRING(NAME,-1) IN (a,e,i,o,u)

Quiero consultar la lista de nombres de CITY de la tabla STATION(id, city, longitude, latitude) que tienen vocales como sus primeros y últimos caracteres. El resultado no puede contener duplicados.

Para esto es que escribí una consulta como WHERE NAME LIKE ''a%'' que tenía 25 condiciones, cada vocal para cada otra vocal, que es bastante difícil de manejar. Hay una mejor manera de hacerlo?


Puedes usar una expresión regular :

SELECT DISTINCT city FROM station WHERE city RLIKE ''^[aeiouAEIOU].*[aeiouAEIOU]$''


Usa una expresión regular.

WHERE name REGEXP ''^[aeiou].*[aeiou]$''

^ y $ ancla la coincidencia al principio y al final del valor.

En mi prueba, esto no usará un índice en la columna de name , por lo que tendrá que realizar un análisis completo, como lo haría

WHERE name LIKE ''a%a'' OR name LIKE ''a%e'' ...

Creo que para usar un índice necesitarías usar una unión de consultas que cada una prueba la primera letra.

SELECT * FROM table WHERE name LIKE ''a%'' AND name REGEXP ''[aeiou]$'' UNION SELECT * FROM table WHERE name LIKE ''e%'' AND name REGEXP ''[aeiou]$'' UNION SELECT * FROM table WHERE name LIKE ''i%'' AND name REGEXP ''[aeiou]$'' UNION SELECT * FROM table WHERE name LIKE ''o%'' AND name REGEXP ''[aeiou]$'' UNION SELECT * FROM table WHERE name LIKE ''u%'' AND name REGEXP ''[aeiou]$''


Ambas declaraciones a continuación funcionan en Microsoft SQL SERVER

SELECT DISTINCT city FROM station WHERE SUBSTRING(lower(CITY), 1, 1) IN (''a'', ''e'', ''i'', ''o'', ''u'') AND SUBSTRING(lower(CITY), LEN(CITY), 1) IN (''a'', ''e'', ''i'', ''o'', ''u''); SELECT DISTINCT City FROM Station WHERE City LIKE ''[A, E, O, U, I]%[A, E, O, U, I]'' ORDER BY City;


SELECT DISTINCT city FROM station WHERE city RLIKE ''^[^aeiouAEIOU]''OR city RLIKE''[^aeiouAEIOU]$''


en Microsoft SQL Server puede lograr esto desde la consulta siguiente:

SELECT distinct City FROM STATION WHERE City LIKE ''[AEIOU]%[AEIOU]''

O

SELECT distinct City FROM STATION WHERE City LIKE ''[A,E,I,O,U]%[A,E,I,O,U]''


En MSSQL, esta podría ser la forma:

select distinct city from station where right(city,1) in (''a'', ''e'', ''i'', ''o'',''u'') and left(city,1) in (''a'', ''e'', ''i'', ''o'',''u'')


En Oracle:

SELECT DISTINCT city FROM station WHERE SUBSTR(lower(CITY),1,1) IN (''a'',''e'',''i'',''o'',''u'') AND SUBSTR(lower(CITY),-1) IN (''a'',''e'',''i'',''o'',''u'');


Pruebe lo siguiente:

select distinct city from station where city like ''%[aeuio]''and city like ''[aeuio]%'' Order by City;


Intenta esto para comenzar con la vocal

Oráculo:

select distinct *field* from *tablename* where SUBSTR(*sort field*,1,1) IN(''A'',''E'',''I'',''O'',''U'') Order by *Sort Field*;


Pruebe lo siguiente:

select distinct city from station where city REGEXP ''^[aeiou]'' and city REGEXP ''[aeiou]$'';


SELECT distinct CITY FROM STATION where (CITY LIKE ''a%'' OR CITY LIKE ''e%'' OR CITY LIKE ''i%'' OR CITY LIKE ''o%'' OR CITY LIKE ''u%'' ) AND (CITY LIKE ''%a'' OR CITY LIKE ''%e'' OR CITY LIKE ''%i'' OR CITY LIKE ''%o'' OR CITY LIKE ''%u'' )


Para acceso a MS o servidor MYSQL

SELECT city FROM station WHERE City LIKE ''[aeiou]%''and City LIKE ''%[aeiou]'';


Puedes intentar esto

select city from station where SUBSTRING(city,1,1) in (''A'',''E'',''I'',''O'',''U'') and SUBSTRING(city,-1,1) in (''A'',''E'',''I'',''O'',''U'');


La siguiente consulta servirá para Orale DB:

select distinct(city) from station where upper(substr(city, 1,1)) in (''A'',''E'',''I'',''O'',''U'') and upper(substr(city, length(city),1)) in (''A'',''E'',''I'',''O'',''U'');


Puedes probar una solución simple para MySQL:

SELECCIONE LA CIUDAD DISTINTA DESDE la estación DONDE la ciudad REGEXP "^ [aeiou]. *";