Om du antar att alla stadsnamn är gemener kan du göra något så här:
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)
tar delsträngen till city
börjar på position 1 och av längd 1 (vilket betyder bara den första bokstaven). substr(city, -1, 1)
är väldigt lik, bara positionen är annorlunda:-1
betyder första bokstaven från slutet av strängen - så detta ger dig den sista bokstaven i stadsnamnet.
Om city
kan ha både stora och små bokstäver i WHERE
sats använd lower(city)
istället för city
.
REDIGERA :På populär begäran, här är hur detsamma kan göras med reguljära uttryck. Det är dock ingen idé att använda ett tillvägagångssätt för reguljära uttryck här; standardsträngfunktionerna (som SUBSTR) är nästan säkert mycket snabbare än något annat baserat på reguljära uttryck.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
betyder exakt en av dessa karaktärer. ^
betyder ankare i början av strängen och på liknande sätt $
i slutet av strängen. Strängt taget kräver detta att stadsnamnet är minst två bokstäver långt; om stadsnamn med en bokstav är möjliga kan detta enkelt ändras. (SUBSTR-metoden kräver inga ändringar.)
Det sista argumentet, 'i'
, gör regexp-matchning skiftläge okänslig (ifall det skulle behövas).