WHERE col LIKE IN ('%a%', '%b%') **語法錯誤**,LIKE 不支援 IN 列表。
SELECT * FROM customers
WHERE 'Robert Bob Smith III, PhD.' LIKE CONCAT('%', name, '%');
CONCAT('%', name, '%') 將表欄位 name 包裹為模式CONCAT 後緊跟括號,不可有空格| 需求 | 錯誤寫法 | 正確寫法 |
|---|---|---|
| 字符串精確 IN | — | WHERE col IN ('a','b') |
| 數字精確 IN | — | WHERE id IN (1,2) |
| 字符串模糊 IN | WHERE col LIKE IN ('%a%','%b%') | WHERE col LIKE '%a%' OR col LIKE '%b%' 或 WHERE 'target' LIKE CONCAT('%', col, '%') |
%:任意長度_:單字符NOT LIKE:排除
WHERE col REGEXP 'a|b' -- 匹配含 a 或 b
WHERE col REGEXP '^a|^b' -- 以 a 或 b 開頭
REGEXP 原生支援多模式交替(|),無需 CONCAT 技巧。
CONCAT 方案每行需計算,無法用索引MATCH ... AGAINST)或 ElasticsearchOR LIKE 可讀性更好