Supponendo che tutti i nomi delle città siano tutte lettere minuscole, potresti fare qualcosa del genere:
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)
prende la sottostringa di city
a partire dalla posizione 1 e di lunghezza 1 (cioè solo la prima lettera). substr(city, -1, 1)
è molto simile, solo la posizione è diversa:-1
significa prima lettera dalla fine della stringa - quindi questo ti darà l'ultima lettera del nome della città.
Se city
può avere sia lettere maiuscole che minuscole, nel WHERE
clausola use lower(city)
invece di city
.
MODIFICA :A grande richiesta, ecco come si può fare lo stesso con le espressioni regolari. Tuttavia, non ha senso usare un approccio di espressione regolare qui; le funzioni di stringa standard (come SUBSTR) sono quasi sicuramente molto più veloci di qualsiasi altra cosa basata su espressioni regolari.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
significa esattamente uno di quei caratteri. ^
significa ancora all'inizio della stringa, e allo stesso modo $
alla fine della stringa. A rigor di termini, ciò richiede che il nome della città sia lungo almeno due lettere; se sono possibili nomi di città di una lettera, questo può essere modificato facilmente. (L'approccio SUBSTR non richiede modifiche.)
L'ultimo argomento, 'i'
, rende insensibile la corrispondenza tra maiuscole e minuscole (solo nel caso in cui sia necessario).