Za předpokladu, že všechny názvy měst jsou všechna malá písmena, můžete udělat něco takového:
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)
přebírá podřetězec city
počínaje pozicí 1 a délky 1 (tzn. pouze první písmeno). substr(city, -1, 1)
je velmi podobný, jen pozice je jiná:-1
znamená první písmeno od konce řetězce – tím získáte poslední písmeno názvu města.
Pokud city
může mít velká i malá písmena v WHERE
klauzuli použijte lower(city)
místo city
.
UPRAVIT :Na základě populárního požadavku je zde uvedeno, jak lze totéž udělat s regulárními výrazy. Zde však nemá smysl používat regulární výraz; standardní řetězcové funkce (jako SUBSTR) jsou téměř jistě mnohem rychlejší než cokoli založené na regulárních výrazech.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
znamená přesně jeden z těchto znaků. ^
znamená kotva na začátku řetězce a podobně $
na konci řetězce. Přísně vzato to vyžaduje, aby jméno města bylo dlouhé alespoň dvě písmena; pokud jsou možné jednopísmenné názvy měst, lze je snadno upravit. (Přístup SUBSTR by nevyžadoval žádné změny.)
Poslední argument, 'i'
, nerozlišuje při porovnávání regulárních výrazů velká a malá písmena (jen pro případ, že je to potřeba).