Hvis vi antager, at alle bynavne alle er små bogstaver, kan du gøre noget som dette:
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)
tager understrengen af city
startende ved position 1 og længde 1 (betyder kun det første bogstav). substr(city, -1, 1)
er meget ens, bare positionen er anderledes:-1
betyder første bogstav fra slutningen af strengen - så dette vil give dig det sidste bogstav i bynavnet.
Hvis city
kan have både store og små bogstaver i WHERE
klausul brug lower(city)
i stedet for city
.
REDIGER :Efter populær anmodning, her er, hvordan det samme kan gøres med regulære udtryk. Det nytter dog ikke at bruge en regulært udtrykstilgang her; standardstrengfunktionerne (som SUBSTR) er næsten sikre på at være meget hurtigere end noget andet baseret på regulære udtryk.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
betyder præcis en af disse karakterer. ^
betyder anker i begyndelsen af strengen, og tilsvarende $
for enden af strengen. Det kræver strengt taget, at bynavnet er mindst to bogstaver langt; hvis bynavne på ét bogstav er mulige, kan dette nemt ændres. (SUBSTR-tilgangen kræver ingen ændringer.)
Det sidste argument, 'i'
, gør regexp-matchende store og små bogstaver ufølsom (bare hvis det er nødvendigt).