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

Tìm kiếm từ chính xác (whole word) trong chuỗi với REGEXP trong MySQL

Để tìm một từ chính xác trong chuỗi (không khớp một phần của từ khác), MySQL hỗ trợ biểu thức chính quy (Regular Expression) qua toán tử REGEXP. Mẫu regex '(^|[[:space:]])tu_khoa([[:space:]]|$)' đảm bảo từ khóa được bao quanh bởi đầu chuỗi, khoảng trắng hoặc cuối chuỗi.

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (Title TEXT);

mysql> INSERT INTO DemoTable VALUES
('This is the Introduction to Java'),
('This is the Introduction to MongoDB'),
('This is the Introduction to MySQL');

Dữ liệu

mysql> SELECT * FROM DemoTable;
+-------------------------------------+
| Title                               |
+-------------------------------------+
| This is the Introduction to Java    |
| This is the Introduction to MongoDB |
| This is the Introduction to MySQL   |
+-------------------------------------+

Tìm chính xác từ 'MySQL'

mysql> SELECT * FROM DemoTable 
WHERE Title REGEXP '(^|[[:space:]])MySQL([[:space:]]|$)';

Kết quả

+-----------------------------------+
| Title                             |
+-----------------------------------+
| This is the Introduction to MySQL |
+-----------------------------------+

Giải thích Regex

  • (^|[[:space:]]): Đầu chuỗi (^) HOẶC ký tự khoảng trắng ([[:space:]] bao gồm space, tab, newline).
  • MySQL: Từ khóa cần tìm (phân biệt chữ hoa/thường tùy collation, mặc định không phân biệt).
  • ([[:space:]]|$): Ký tự khoảng trắng HOẶC cuối chuỗi ($).

Lưu ý

  • REGEXP không sử dụng index (full table scan). Với bảng lớn, cân nhắc Fulltext Search (MySQL 5.6+).
  • Để không phân biệt chữ hoa/thường: MySQL mặc định không phân biệt (collation _ci). Muốn phân biệt: REGEXP BINARY hoặc dùng collation _cs.
  • Từ MySQL 8.0, có thể dùng REGEXP_LIKE() chuẩn SQL.

Mở rộng: Để tìm từ có chứa ký tự đặc biệt regex (., *, ?, +, ...), cần escape bằng dấu backslash \\.