Yêu cầu
Truy vấn các dòng mà giá trị cột bắt đầu bằng 2 ký tự nguyên âm (a, e, i, o, u - không phân biệt hoa/thường).
Giải pháp: REGEXP / RLIKE
Tạo bảng và dữ liệu:
CREATE TABLE DemoTable664 (CityName VARCHAR(100));
INSERT INTO DemoTable664 VALUES
('Springfield'), ('Austin'), ('Franklin'), ('OAKLAND'), ('Anchorage');
Truy vấn:
SELECT * FROM DemoTable664
WHERE CityName RLIKE '^[aeiouAEIOU][aeiouAEIOU]';
Kết quả:
+----------+
| CityName |
+----------+
| Austin |
| OAKLAND |
+----------+
Giải thích Regex
^: Bắt đầu chuỗi.[aeiouAEIOU]: Một ký tự nguyên âm (hoa hoặc thường).[aeiouAEIOU]: Ký tự thứ 2 cũng là nguyên âm.- Không có
$nên không quan tâm phần còn lại.
Cách viết gọn hơn (case-insensitive)
Nếu collation case-insensitive (mặc định):
WHERE CityName RLIKE '^[aeiou]{2}'
Hoặc dùng LOWER():
WHERE LOWER(CityName) RLIKE '^[aeiou]{2}'
Hiệu năng
RLIKE/REGEXPkhông sử dụng index thông thường (full scan).- Có thể tạo
GENERATED COLUMNlưu 2 ký tự đầu + index lên cột đó (MySQL 5.7+). - Với dữ liệu lớn, cân nhắc Full-Text Search hoặc xử lý ở application layer.
Mở rộng: N nguyên âm đầu tiên
-- 3 nguyên âm đầu
WHERE CityName RLIKE '^[aeiouAEIOU]{3}'
-- Tối thiểu 2 nguyên âm đầu
WHERE CityName RLIKE '^[aeiouAEIOU]{2,}'