Dengan asumsi semua nama kota semua huruf kecil, Anda bisa melakukan sesuatu seperti ini:
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)
mengambil substring dari city
mulai dari posisi 1 dan panjang 1 (artinya, hanya huruf pertama). substr(city, -1, 1)
sangat mirip, hanya posisinya yang berbeda:-1
berarti huruf pertama dari akhir string - jadi ini akan memberi Anda huruf terakhir dari nama kota.
Jika city
mungkin memiliki huruf besar dan kecil, di WHERE
klausa gunakan lower(city)
bukannya city
.
EDIT :Dengan permintaan populer, berikut adalah bagaimana hal yang sama dapat dilakukan dengan ekspresi reguler. Tidak ada gunanya menggunakan pendekatan ekspresi reguler di sini; fungsi string standar (seperti SUBSTR) hampir pasti jauh lebih cepat daripada apa pun berdasarkan ekspresi reguler.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
berarti tepat salah satu dari karakter tersebut. ^
berarti jangkar di awal string, dan juga $
di ujung tali. Sebenarnya, ini membutuhkan nama kota setidaknya dua huruf; jika nama kota satu huruf memungkinkan, ini dapat dimodifikasi dengan mudah. (Pendekatan SUBSTR tidak memerlukan perubahan.)
Argumen terakhir, 'i'
, membuat pencocokan huruf besar-kecil dengan regexp tidak peka (untuk berjaga-jaga jika diperlukan).