| 符號 | 含義 | 範例 | 匹配結果說明 |
|---|---|---|---|
% | 任意 0~n 個字符 | LIKE '%三%' | 「張三」「張貓三」「三腳貓」「唐三藏」均匹配 |
_ | 任意單個字符 | LIKE '_三_' | 僅匹配三字且中間是「三」的,如「唐三藏」 |
[abc] | 字符集合中任一字符 | LIKE '[張李王]三' | 匹配「張三」「李三」「王三」,非「張李王三」 |
[^abc] | 非字符集合中任一字符 | LIKE '[^張李王]三' | 匹配「趙三」「孫三」等非張李王姓的「三」 |
-- 既含「三」又含「貓」
WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'
-- 以「三」開頭、共三字
WHERE u_name LIKE '三__'
-- 範圍寫法:[0-9]、[a-z]
WHERE u_name LIKE '老[1-9]'
若要搜尋字面 %、_、[,需用 [] 包裹:
WHERE col LIKE '%[%]%' -- 含字面 %
WHERE col LIKE '%[_]%' -- 含字面 _
WHERE col LIKE '%[[]%' -- 含字面 [
function sql_like_escape($str) {
$str = str_replace('[', '[[', $str); -- 必須最先處理 [
$str = str_replace('_', '[_]', $str);
$str = str_replace('%', '[%]', $str);
return $str;
}
LIKE 'abc%'(前綴固定)可用索引;LIKE '%abc' 或 LIKE '%abc%' 全表掃描。MATCH...AGAINST)、Elasticsearch、或冗餘 n-gram 列。