match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
| 字元 | 說明 | 範例 |
|---|---|---|
| % | 零或多個任意字元 | WHERE title LIKE '%computer%' |
| _ (底線) | 單一任意字元 | WHERE au_fname LIKE '_ean' (Dean, Sean) |
| [範圍] | 指定範圍/集合內的單一字元 | WHERE au_lname LIKE '[C-P]arsen' |
| [^範圍] | 不在指定範圍/集合內的單一字元 | WHERE au_lname LIKE 'de[^l]%' |
放入方括號:LIKE '5[%]' 比對 "5%"、LIKE '[_]n' 比對 "_n"、LIKE '[-acdf]' 比對 "-、a、c、d、f"
自訂逸出字元,搜尋包含萬用字元的字面字串:
WHERE comment LIKE '%30!%%' ESCAPE '!' -- 尋找 "30%"
WHERE notes LIKE '50%% off...' ESCAPE '%' -- 尋找 "50% off..."
| 資料型別 | 模式尾隨空格 | 運算式尾隨空格 |
|---|---|---|
| char/varchar (非 Unicode) | 有意義 | **忽略** (會比對含零或多空格的值) |
| nchar/nvarchar (Unicode) | 有意義 | **有意義** (SQL-92 標準) |
-- 非 Unicode char(30) 儲存 'Robert King' (含尾隨空格)
WHERE col1 LIKE '% King' -- 找到
-- Unicode nchar(30) 儲存 'Robert King' (含尾隨空格)
WHERE col1 LIKE '% King' -- **找不到** (尾隨空格參與比對)
WHERE RTRIM(col1) LIKE '% King' -- 找到
datetime 值含日期部分,直接等值比對易失效。建議:
WHERE arrival_time LIKE '%9:20%' -- 找到 1998-12-31 09:20
| 陷阱 | 說明 | 解決 |
|---|---|---|
| NOT LIKE 多重萬用字元 | LIKE '[^s][^y][^s]%' 逐步計算,可能漏掉符合條件列 | 改用 NOT LIKE 'sys%' |
| char 變數尾隨空格導致 LIKE 失效 | @var CHAR(20) 未填滿含空格 | 用 RTRIM(@var) + '%' 或改 VARCHAR |
| Unicode 欄位尾隨空格干擾 | nchar 固定長度含空格 | RTRIM(col) LIKE pattern |