Vấn đề
Ký tự % là wildcard trong LIKE (khớp 0 hoặc nhiều ký tự). Muốn tìm literal '%' cần escape.
Cách escape: Backslash \
Tạo bảng:
CREATE TABLE DemoTable629 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentSubject TEXT
);
INSERT INTO DemoTable629(StudentSubject) VALUES
('MySQL%'), ('Spring%Hibernate'), ('%Java');
Tìm chuỗi kết thúc bằng '%' (ký tự % ở cuối):
SELECT * FROM DemoTable629
WHERE StudentSubject LIKE '%\%';
Kết quả: Chỉ 'MySQL%'.
Các trường hợp escape
| Mục tiêu | Pattern | Giải thích |
|---|---|---|
| Kết thúc bằng % | LIKE '%\%' | % đầu = wildcard, \% = literal % |
| Bắt đầu bằng % | LIKE '\%%' | \% = literal %, % cuối = wildcard |
| Chứa % ở giữa | LIKE '%\%%' | % đầu/cuối = wildcard, \% = literal |
| Chuỗi chính xác '100%' | LIKE '100\%' | Không có wildcard |
Tùy chỉnh ký tự escape
-- Dùng ký tự khác (ví dụ: |)
SELECT * FROM DemoTable629
WHERE StudentSubject LIKE '%|%' ESCAPE '|';
Lưu ý
- Trong string literal SQL, backslash cần escape thêm:
'%\\%'(đôi khi cần 4 backslash tùy client). - Prepared statement: Truyền pattern làm parameter → không cần escape thêm.
FIND_IN_SETkhông dùng wildcard, không cần escape %.