在 LIKE 條件式中,通配符代表任意字元,但有時我們需要搜尋字面上的「%」、「_」或「[」等特殊字元,此時需使用跳脫字元。本文系統說明 SQL Server 四種通配符、兩種跳脫語法與實戰範例。
| 符號 | 意義 | 範例模式 | 匹配範例 |
|---|---|---|---|
% | 任意長度(含 0)字元 | 'm%n' | man, min, mon, moon, mn |
_ | 單一任意字元 | 'm_n' | man, min, mon(不含 mn) |
[字元集合] | 集合中任一字元 | '[mz]' 或 '[m-z]' | m, z / m~z 間任一字元 |
[^] | 非集合字元 | '[^mz]' | 除 m、z 外任一字元 |
CREATE TABLE tb_TestTable (id INT IDENTITY, name NVARCHAR(64));
INSERT INTO tb_TestTable(name) VALUES('tiana'),('tiana5'),('tiana5%');
-- 尋找名稱包含字面 % 號的資料
SELECT name FROM tb_TestTable WHERE name LIKE '%/%' ESCAPE '/';
-- 結果:tiana5%
ESCAPE '/' 宣告 / 為跳脫字元,故 %/% 中第二個 % 被視為字面百分號,第一個 % 仍為通配符。
SELECT name FROM tb_TestTable WHERE name LIKE '%[%]';
[%] 直接告訴引擎此處 % 為字面字元。同理 [_]、[[]、[]] 皆可用。
LIKE '%[_]%' ESCAPE '/' 或 LIKE '%[_]%'LIKE '%[[]]%'['']、[""] 或 ESCAPE 處理。LIKE '%abc%')無法使用索引,導致全表掃描。-- 含 % 號的產品代碼
WHERE ProductCode LIKE '%[%]%' -- 方括號法
WHERE ProductCode LIKE '%/%' ESCAPE '/' -- ESCAPE 法
-- 含底線的檔名
WHERE FileName LIKE '%[_]%' -- 方括號法
-- 以 [ 開頭的字串
WHERE Col LIKE '[[]%' -- 方括號法
掌握通配符與跳脫字元,能精準撰寫模糊查詢,避免資料遺漏或誤判。