Giả sử tất cả các tên thành phố đều là chữ thường, bạn có thể làm như sau:
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)
lấy chuỗi con của city
bắt đầu từ vị trí 1 và có độ dài 1 (nghĩa là chỉ chữ cái đầu tiên). substr(city, -1, 1)
rất giống nhau, chỉ khác vị trí:-1
có nghĩa là chữ cái đầu tiên từ end của chuỗi - vì vậy điều này sẽ cung cấp cho bạn chữ cái cuối cùng của tên thành phố.
Nếu city
có thể có cả chữ hoa và chữ thường, trong WHERE
mệnh đề sử dụng lower(city)
thay vì city
.
CHỈNH SỬA :Theo yêu cầu phổ biến, đây là cách tương tự có thể được thực hiện với các biểu thức chính quy. Mặc dù vậy, không có ích gì khi sử dụng phương pháp biểu thức chính quy ở đây; các hàm chuỗi chuẩn (như SUBSTR) gần như chắc chắn sẽ nhanh hơn nhiều so với bất kỳ hàm nào dựa trên biểu thức chính quy.
....
where regexp_like(city, '^(a|e|i|o|u).*(a|e|i|o|u)$', 'i')
(a|e|i|o|u)
có nghĩa chính xác là một trong những ký tự đó. ^
có nghĩa là neo ở đầu chuỗi và tương tự $
ở cuối chuỗi. Nói một cách chính xác, điều này đòi hỏi tên thành phố phải dài ít nhất hai chữ cái; nếu tên thành phố có một chữ cái thì có thể sửa đổi dễ dàng. (Phương pháp SUBSTR sẽ không yêu cầu thay đổi.)
Đối số cuối cùng, 'i'
, làm cho đối sánh regexp không phân biệt chữ hoa chữ thường (chỉ trong trường hợp cần thiết).