欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中find_in_set()函數(shù)用法示例詳解

 更新時間:2022年09月09日 10:47:51   作者:Gan_1314  
find_in_set這個是mysql的一個函數(shù),見得比較少,下面這篇文章主要給大家介紹了關(guān)于MySQL中find_in_set()函數(shù)用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論