Toán tử REGEXP (hoặc RLIKE) cho phép lọc hàng theo pattern regex mạnh mẽ hơn LIKE.
Ví dụ minh họa
Tạo bảng mã sinh viên:
CREATE TABLE DemoTable1573 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentCode VARCHAR(20)
);
INSERT INTO DemoTable1573 (StudentCode) VALUES
('STU_774'), ('909_Sam'), ('3_Carol_455'), ('David_903');
Tìm mã chứa chữ cái theo sau là số (pattern [a-zA-Z][0-9]):
SELECT * FROM DemoTable1573 WHERE StudentCode REGEXP '[a-zA-Z][0-9]';
Kết quả
| StudentId | StudentCode |
|---|---|
| 2 | 909_Sam |
| 3 | 3_Carol_455 |
→ 'STU_774' có 'U_' (chữ + gạch dưới), 'David_903' có 'd_' — không khớp pattern chữ+số liên tiếp.
Regex pattern phổ biến trong MySQL
| Pattern | Ý nghĩa | Ví dụ khớp |
|---|---|---|
^abc | Bắt đầu bằng abc | abc123 |
xyz$ | Kết thúc bằng xyz | 123xyz |
[0-9] | Một chữ số | a1b |
[a-z] | Một chữ thường | 1a2 |
[[:<:]]word[[:>:]] | Ranh giới từ (word boundary) | word, word1 (không khớp sword) |
.* | Bất kỳ chuỗi nào | ... |
MySQL 8.0+: REGEXP_REPLACE, REGEXP_SUBSTR
REGEXP_SUBSTR(str, pat): Trích xuất chuỗi khớp pattern.REGEXP_REPLACE(str, pat, repl): Thay thế pattern (xem bài 1003075233).REGEXP_INSTR(str, pat): Vị trí khớp đầu tiên.REGEXP_LIKE(str, pat): Trả về boolean (giống REGEXP).
⚠️ Hiệu năng
REGEXPkhông dùng index thông thường → full table scan.- Trên bảng lớn, cân nhắc: fulltext index, generated column + index, hoặc xử lý ở ứng dụng.