MySQL中find_in_set()函數(shù)用法示例詳解
1、 find_in_set()官方涵義(MySQL手冊中語法說明)
FIND_IN_SET(str,strlist),該函數(shù)的作用是查詢字段(strlist) 中是否包含(str)的結(jié)果,返回結(jié)果為 null或記錄 。
str 要查詢的字符串
strlist 需查詢的字段,參數(shù)以”,”分隔,形式如 (1,2,6,8,10,22)
假如字符串str在由N個子鏈組成的字符串列表strlist 中,則返回值的范圍在 1 到 N 之間。 一個字符串列表就是一個由一些被 ‘,’ 符號分開的子鏈組成的字符串。如果第一個參數(shù)是一個常數(shù)字符串,而第二個是type SET列,則FIND_IN_SET() 函數(shù)被優(yōu)化,使用比特計算。 如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數(shù)為NULL,則返回值為 NULL。這個函數(shù)在第一個參數(shù)包含一個逗號( , )時將無法正常運行。
示例:
SELECT FIND_IN_SET('b', 'a,b,c,d'); // 結(jié)果:2 // 因為 b 在strlist集合中2的位置, a是位置1 select FIND_IN_SET('1', '1'); // 結(jié)果:1 // 這時候的strlist集合有點特殊,只有一個字符串 select FIND_IN_SET('2', '1,2'); // 結(jié)果:2 select FIND_IN_SET('6', '1'); // 結(jié)果:0 strlist中不存在str,所以返回0。
綜上: FIND_IN_SET函數(shù)中,若前一個字符串包含在后一個字符串集合中,返回大于0的數(shù),該數(shù)為前一個字符串在后一個字符串中的位置。
2、find_in_set() 和 in 的區(qū)別
新建測試表,增加幾條測試數(shù)據(jù)。
CREATE TABLE `test` ( `ID` int(11) NOT NULL, `LIST` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test` VALUES ('1', 'AA,BB,CC'); INSERT INTO `test` VALUES ('2', 'AA,BB'); INSERT INTO `test` VALUES ('3', 'AA');
find_in_set()和in的查詢比較
-- IN查詢字段條件 SELECT id,list,'字段條件' AS 'IN字段' from TEST WHERE list in ('AA');
-- IN查詢常量條件-條件為真 SELECT id,list,'條件為真' AS 'IN常量條件為真' from TEST WHERE 'AA' in ('AA','BB');
-- IN查詢常量條件-條件為假 SELECT id,list,'條件為假' AS 'IN常量條件為假' from TEST WHERE 'AA' in ('BB','CC');
-- FIND_IN_SET字段條件 SELECT id,list,'字段條件' AS 'FIND_IN_SET字段' from TEST WHERE FIND_IN_SET('AA', list);
-- FIND_IN_SET常量條件為真 SELECT id,list,'條件為真' AS 'FIND_IN_SET常量條件為真' from TEST WHERE FIND_IN_SET('AA', 'AA,BB,CC');
-- FIND_IN_SET常量條件為假 SELECT id,list,'條件為假' AS 'FIND_IN_SET常量條件為假' from TEST WHERE FIND_IN_SET('AA', 'BB,CC');
SELECT id,list FROM TEST WHERE FIND_IN_SET(list,'AA,BB')
區(qū)別:
1、in后面只能跟常量, find_in_set()函數(shù)可以使用常量或字段。
2、in是完全匹配,find_in_set()函數(shù)是精確匹配,字段值以英文”,”分隔。
另:like是廣泛的模糊匹配,字符串中沒有分隔符,F(xiàn)ind_IN_SET 是精確匹配,字段值以英文”,”分隔,F(xiàn)ind_IN_SET查詢的結(jié)果要小于like查詢的結(jié)果。
3、應(yīng)用場景
3.1 文章表type字段查詢
文章表里面有個type字段,它存儲的是文章類型,有 1頭條、2推薦、3熱點、4圖文等等 ?,F(xiàn)在有篇文章他既是頭條,又是熱點,還是圖文,type中以 1,3,4 的格式存儲。那我們?nèi)绾斡胹ql查找所有type中有4的圖文類型的文章呢?
select * from article where FIND_IN_SET('4',type)
3.2 部門樹查詢,匹配當前節(jié)點及所有子節(jié)點
1) 數(shù)據(jù)表字段說明
2) 匹配部門id或父id為100的數(shù)據(jù)
SELECT dept_id FROM sys_dept WHERE dept_id = 100 or FIND_IN_SET( 100 , ancestors )
總結(jié)
到此這篇關(guān)于MySQL中find_in_set()函數(shù)用法詳解的文章就介紹到這了,更多相關(guān)MySQL find_in_set()函數(shù)用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL的FIND_IN_SET函數(shù)使用方法分享
- Mysql中的find_in_set的使用方法介紹
- Mysql中FIND_IN_SET()和IN區(qū)別簡析
- mysql通過find_in_set()函數(shù)實現(xiàn)where in()順序排序
- MySQL之FIND_IN_SET()的用法及說明
- Mysql中find_in_set()函數(shù)用法詳解以及使用場景
- mysql查詢FIND_IN_SET?REGEXP實踐示例
- MySQL中的FIND_IN_SET函數(shù)的使用場景
- mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)詳解
- Mysql中FIND_IN_SET函數(shù)的使用及問題
- MySQL FIND_IN_SET函數(shù)的使用場景
相關(guān)文章
mysql如何判斷同一字段是否有重復(fù)數(shù)據(jù)
這篇文章主要介紹了mysql如何判斷同一字段是否有重復(fù)數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05NaviCat連接時提示"不支持遠程連接的MySql數(shù)據(jù)庫"解決方法
前段時間,因為一項目,需要做MYSql的數(shù)據(jù)同步服務(wù),但由于網(wǎng)站空間服務(wù)供應(yīng)商不提供遠程連接MYSql,所以無法利用NaviCat客戶端通過填寫服務(wù)器地址來連接遠程服務(wù)器,在網(wǎng)上找到了SSH方式連接,但經(jīng)過測試后發(fā)現(xiàn)依舊無法連接。2011-08-08利用MySQL函數(shù)實現(xiàn)判斷視頻擴展名的代碼
MySQL擁有強大的自定義函數(shù)功能,如下,我寫了一個用MySQL函數(shù) 判斷視頻地址是否可以手機端播放2012-02-02MySQL查詢空字段或非空字段(is null和not null)
本文介紹在MySQL中,面對值為空(NULL)的字段,應(yīng)該如何查詢。怎么判斷一個字段的值為NULL或不為NULL,需要的朋友可以參考下2016-04-04