Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy vấn SELECT với biểu thức chính quy REGEXP trong MySQL

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ả

StudentIdStudentCode
2909_Sam
33_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ĩaVí dụ khớp
^abcBắt đầu bằng abcabc123
xyz$Kết thúc bằng xyz123xyz
[0-9]Một chữ sốa1b
[a-z]Một chữ thường1a2
[[:<:]]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

  • REGEXP khô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.