Suponiendo que todos los nombres de las ciudades estén en minúsculas, podría hacer algo como esto:
select city
from station
where substr(city, 1, 1) in ('a', 'e', 'i', 'o', 'u')
and substr(city, -1, 1) in ('a', 'e', 'i', 'o', 'u')
substr(city, 1, 1)
toma la subcadena de city
comenzando en la posición 1 y de longitud 1 (es decir, solo la primera letra). substr(city, -1, 1)
es muy similar, solo que la posición es diferente:-1
significa primera letra desde el final de la cadena, por lo que obtendrá la última letra del nombre de la ciudad.
Si city
puede tener letras mayúsculas y minúsculas, en WHERE
uso de la cláusula lower(city)
en lugar de city
.
EDITAR :Por petición popular, así es como se puede hacer lo mismo con las expresiones regulares. Sin embargo, no tiene sentido usar un enfoque de expresión regular aquí; es casi seguro que las funciones de cadena estándar (como SUBSTR) serán mucho más rápidas que cualquier función basada en expresiones regulares.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
significa exactamente uno de esos caracteres. ^
significa ancla al comienzo de la cadena, y de manera similar $
al final de la cadena. Estrictamente hablando, esto requiere que el nombre de la ciudad tenga al menos dos letras; si los nombres de ciudades de una letra son posibles, esto se puede modificar fácilmente. (El enfoque SUBSTR no requeriría cambios).
El último argumento, 'i'
, hace que la expresión regular coincida con mayúsculas y minúsculas (en caso de que sea necesario).