首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL LIKE 查詢字符串實戰:IN 結合 CONCAT 實現多值模糊匹配

     編輯:MySQL 資料庫相關知識

MySQL 多值模糊匹配:LIKE + IN 無法直連,用 CONCAT 破解

問題

WHERE col LIKE IN ('%a%', '%b%') **語法錯誤**,LIKE 不支援 IN 列表。

解法:CONCAT 動態構建模式


SELECT * FROM customers
WHERE 'Robert Bob Smith III, PhD.' LIKE CONCAT('%', name, '%');
  • CONCAT('%', name, '%') 將表欄位 name 包裹為模式
  • 外層字符串常量用 LIKE 匹配
  • **注意**:CONCAT 後緊跟括號,不可有空格

場景對比

需求錯誤寫法正確寫法
字符串精確 IN—WHERE col IN ('a','b')
數字精確 IN—WHERE id IN (1,2)
字符串模糊 INWHERE col LIKE IN ('%a%','%b%')WHERE col LIKE '%a%' OR col LIKE '%b%' 或 WHERE 'target' LIKE CONCAT('%', col, '%')

完整 LIKE 模式速查(同 74208)

  • %:任意長度
  • _:單字符
  • NOT LIKE:排除
  • 大小寫不敏感(預設)

REGEXP 替代方案


WHERE col REGEXP 'a|b'   -- 匹配含 a 或 b
WHERE col REGEXP '^a|^b' -- 以 a 或 b 開頭

REGEXP 原生支援多模式交替(|),無需 CONCAT 技巧。

效能提示

  • CONCAT 方案每行需計算,無法用索引
  • 大表多值模糊匹配建議:全文索引(MATCH ... AGAINST)或 Elasticsearch
  • 少量值(<5)用 OR LIKE 可讀性更好
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved