首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL FIND_IN_SET() 函數兩大實用場景:逗號分隔字段查詢與自定義排序

     編輯:MySQL 綜合教學

MySQL FIND_IN_SET() 實戰:查詢逗號分隔字段 & 強制排序

FIND_IN_SET(str, strlist) 返回 str 在逗號分隔字符串 strlist 中的位置(1-based),未找到返回 0。兩大典型用法:

1. 查詢逗號分隔字段包含某值的行

表 t 字段 colid 存儲 ',31,32,21,12' 格式數據。

SELECT * FROM t WHERE FIND_IN_SET('32', colid) > 0;

等效於 colid LIKE '%,32,%' OR colid LIKE '32,%' OR colid LIKE '%,32' OR colid = '32',但語義更清晰、不易出錯。

2. 自定義順序排序

需按 area 字段順序 2,1,3 輸出。

SELECT * FROM t
WHERE area IN (2,1,3)
ORDER BY FIND_IN_SET(area, '2,1,3');

FIND_IN_SET 返回位置,ORDER BY 按位置升序即得到指定順序。

注意事項

  • strlist 必須為常量字符串或字段,不能為表達式(如 CONCAT 結果需先存入變量)。
  • 大數據量下 FIND_IN_SET 無法使用索引,屬全表掃描,僅適用中小表或低頻查詢。
  • 嚴格模式下參數為 NULL 返回 NULL。

總結

FIND_IN_SET 是處理「逗號分隔存儲」這一反範式設計的利器,雖不走索引,但在標籤、分類等低基數、低頻查詢場景極其實用。

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