Để 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 ý:
REGEXPkhông phân biệt chữ hoa/thường mặc định (case-insensitive) trong MySQL. Muốn phân biệt, dùngREGEXP 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:
REGEXPkhô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.