Zakładając, że wszystkie nazwy miast są małymi literami, możesz zrobić coś takiego:
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)
pobiera podciąg city
zaczynając od pozycji 1 i długości 1 (czyli tylko pierwszej litery). substr(city, -1, 1)
jest bardzo podobny, tylko pozycja jest inna:-1
oznacza pierwszą literę od koniec ciągu - więc to da ci ostatnią literę nazwy miasta.
Jeśli city
może mieć zarówno duże, jak i małe litery, w WHERE
klauzula użyj lower(city)
zamiast city
.
EDYTUJ :Na popularne żądanie, oto jak to samo można zrobić z wyrażeniami regularnymi. Nie ma jednak sensu używać tutaj podejścia opartego na wyrażeniach regularnych; standardowe funkcje łańcuchowe (takie jak SUBSTR) są prawie pewne, że są znacznie szybsze niż cokolwiek oparte na wyrażeniach regularnych.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
oznacza dokładnie jedną z tych postaci. ^
oznacza kotwicę na początku ciągu i podobnie $
na końcu ciągu. Ściśle mówiąc, wymaga to, aby nazwa miasta składała się z co najmniej dwóch liter; jeśli możliwe są jednoliterowe nazwy miast, można je łatwo zmienić. (Podejście SUBSTR nie wymagałoby żadnych zmian.)
Ostatni argument, 'i'
, sprawia, że dopasowujące wyrażenie regularne nie uwzględnia wielkości liter (tylko w przypadku, gdy jest to konieczne).