Ervan uitgaande dat alle stadsnamen allemaal kleine letters zijn, zou je zoiets als dit kunnen doen:
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)
neemt de substring van city
beginnend op positie 1 en van lengte 1 (d.w.z. alleen de eerste letter). substr(city, -1, 1)
lijkt erg op elkaar, alleen de positie is anders:-1
betekent eerste letter van het einde van de string - dus dit geeft je de laatste letter van de plaatsnaam.
Als city
mag zowel hoofdletters als kleine letters hebben, in de WHERE
clausule gebruik lower(city)
in plaats van city
.
BEWERKEN :Op veler verzoek, hier is hoe hetzelfde kan worden gedaan met reguliere expressies. Het heeft echter geen zin om hier een reguliere expressiebenadering te gebruiken; de standaard tekenreeksfuncties (zoals SUBSTR) zijn vrijwel zeker veel sneller dan alles dat op reguliere expressies is gebaseerd.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
betekent precies een van die tekens. ^
betekent anker aan het begin van de string, en op dezelfde manier $
aan het einde van de snaar. Strikt genomen vereist dit dat de plaatsnaam minimaal twee letters lang is; als plaatsnamen van één letter mogelijk zijn, kan dit eenvoudig worden gewijzigd. (De SUBSTR-aanpak vereist geen wijzigingen.)
Het laatste argument, 'i'
, maakt de regexp-overeenkomst hoofdletter ongevoelig (voor het geval dat nodig is).