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).