| 通配符 | 含義 | 示例匹配 |
|---|---|---|
| % | 任意長度字符(含 0 個) | 'abc%' 匹配 'abc', 'abcdef' |
| _ | 單個任意字符 | 'ab_' 匹配 'abc', 'ab1' |
需查詢字面值包含 % 或 _ 的數據,如:'60%'、'user_name'。
-- 查詢以 '60%' 開頭的記錄 SELECT * FROM score WHERE percent LIKE '60\%%'; -- 解析:第一個 % 是通配符,第二個 \% 是字面 %
適用: 單條查詢、動態 SQL 拼接
-- 使用 / 作為轉義字符 SELECT * FROM score WHERE percent LIKE '60/%' ESCAPE '/'; -- 解析:/ 後面的 % 被轉義為字面 %,前面無 / 的 % 仍是通配符
優勢: 避免反斜杠在字符串字面量中需雙重轉義(如 '60\\%'),可讀性更好
CREATE TABLE t_escape (col VARCHAR(20));
INSERT INTO t_escape VALUES ('60%'), ('60_percent'), ('user_name'), ('user-name');
-- 1. 查詢字面 '60%'
SELECT * FROM t_escape WHERE col LIKE '60\%%'; -- 反斜杠
SELECT * FROM t_escape WHERE col LIKE '60/%' ESCAPE '/'; -- ESCAPE
-- 2. 查詢包含下劃線的記錄
SELECT * FROM t_escape WHERE col LIKE '%\_%'; -- 反斜杠轉義 _
SELECT * FROM t_escape WHERE col LIKE '%/_%' ESCAPE '/'; -- ESCAPE 轉義 _
-- 3. 查詢以 'user_' 開頭
SELECT * FROM t_escape WHERE col LIKE 'user\_%'; -- 匹配 'user_name'
SELECT * FROM t_escape WHERE col LIKE 'user_/%' ESCAPE '/';
| 語言 | 字符串字面量 | 實際 SQL |
|---|---|---|
| Java | "60\\\\%" | 60\\% |
| Python | r"60\\%" | 60\% |
| C# | @"60\\%" | 60\% |
| PHP | "60\\\\%" | 60\% |
建議: 應用層統一使用 ESCAPE '/' 方案,避免多層轉義心智負擔
%abc 導致全表掃描,轉義不改變此特性abc% 可走索引,轉義同樣適用