首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 模糊查詢:字段前後加逗號匹配列表值

     編輯:程式設計綜合問答

需求

表 Biao 中字段 U_Name 存儲逗號分隔的值(如 張三,李四,王五),查詢包含完整值 張三,李四,王五 的記錄,避免誤匹配 張三,李四 或 李四,王五。

標準 SQL 寫法(通用)

SELECT U_ID, U_Name
FROM Biao
WHERE CONCAT(',', U_Name, ',') LIKE '%,張三,李四,王五,%';

MySQL 專用 REGEXP 寫法

SELECT U_ID, U_Name
FROM Biao
WHERE CONCAT(',', U_Name, ',') REGEXP ',張三,李四,王五,';

SQL Server 寫法

SELECT U_ID, U_Name
FROM Biao
WHERE ',' + U_Name + ',' LIKE '%,張三,李四,王五,%';

性能優化建議

  • 此類查詢無法使用普通索引,全表掃描。
  • 若頻繁查詢,建議規範化設計:拆分關聯表 Biao_Tags(Biao_ID, Tag),建立索引,JOIN 查詢。
  • 或使用全文檢索(MySQL FULLTEXT、PostgreSQL tsvector)。

注意事項

原問題中 select ... ',' + U_Name + ',' as U_Name2 ... where U_Name2 like ... 在同一層級 SELECT 列別名不能直接用於 WHERE,需嵌套子查詢或重複表達式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved