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

Tìm chuỗi chứa ký tự đặc biệt trong MySQL bằng REGEXP

Để tìm các hàng mà cột chứa ký tự đặc biệt (không phải chữ cái và số), dùng REGEXP với pattern [^a-zA-Z0-9].

Cú pháp

SELECT * FROM yourTableName
WHERE yourColumnName REGEXP '[^a-zA-Z0-9]';

Ví dụ minh họa

Tạo bảng và chèn dữ liệu:

CREATE TABLE specialCharactersDemo (
    StudentId VARCHAR(100)
);

INSERT INTO specialCharactersDemo VALUES ('STU_1234');
INSERT INTO specialCharactersDemo VALUES ('STU567');
INSERT INTO specialCharactersDemo VALUES ('STU#1234');
INSERT INTO specialCharactersDemo VALUES ('STU897$');
INSERT INTO specialCharactersDemo VALUES ('STU999');
INSERT INTO specialCharactersDemo VALUES ('STU1010');

Dữ liệu:

+-----------+
| StudentId |
+-----------+
| STU_1234  |
| STU567    |
| STU#1234  |
| STU897$   |
| STU999    |
| STU1010   |
+-----------+

Tìm hàng có ký tự đặc biệt (_, #, $, v.v.):

SELECT * FROM specialCharactersDemo
WHERE StudentId REGEXP '[^a-zA-Z0-9]';

Kết quả (3 hàng):

+-----------+
| StudentId |
+-----------+
| STU_1234  |
| STU#1234  |
| STU897$   |
+-----------+

Cách viết tắt

Dùng class ký tự POSIX [[:alnum:]] (tương đương [a-zA-Z0-9]):

SELECT * FROM specialCharactersDemo
WHERE StudentId REGEXP '[^[:alnum:]]';

Kết quả y hệt.

Lưu ý:

  • REGEXP không phân biệt chữ hoa/thường mặc định (case-insensitive) trong MySQL. Muốn phân biệt, dùng REGEXP BINARY.
  • Pattern [^...] là phủ định: khớp bất kỳ ký tự không nằm trong tập hợp.
  • Hiệu năng: REGEXP không dùng index, có thể chậm trên bảng lớn. Cân nhắc thêm điều kiện khác hoặc dùng fulltext search nếu cần.