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]. *";