共計 2780 個字符,預計需要花費 7 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這期內容當中丸趣 TV 小編將會給大家?guī)碛嘘P find_in_set()函數(shù)怎么在 mysql 中使用,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
MySQL 手冊中 find_in_set 函數(shù)的語法:
FIND_IN_SET(str,strlist)
str 要查詢的字符串
strlist 字段名 參數(shù)以”,”分隔 如 (1,2,6,8)
查詢字段 (strlist) 中包含 (str) 的結果,返回結果為 null 或記錄
假如字符串 str 在由 N 個子鏈組成的字符串列表 strlist 中,則返回值的范圍在 1 到 N 之間。一個字符串列表就是一個由一些被‘, 符號分開的子鏈組成的字符串。如果第一個參數(shù)是一個常數(shù)字符串,而第二個是 type SET 列,則 FIND_IN_SET() 函數(shù)被優(yōu)化,使用比特計算。如果 str 不在 strlist 或 strlist 為空字符串,則返回值為 0。如任意一個參數(shù)為 NULL,則返回值為 NULL。這個函數(shù)在第一個參數(shù)包含一個逗號 (‘,) 時將無法正常運行。
——————————————————–
例子:
mysql SELECT FIND_IN_SET( b , a,b,c,d
- 2 因為 b 在 strlist 集合中放在 2 的位置 從 1 開始
select FIND_IN_SET( 1 , 1 返回 就是 1 這時候的 strlist 集合有點特殊 只有一個字符串 其實就是要求前一個字符串 一定要在后一個字符串集合中才返回大于 0 的數(shù)
select FIND_IN_SET( 2 , 1,2 返回 2
select FIND_IN_SET(6 , 1 返回 0
——————————————————–
注意:
select * from treenodes where FIND_IN_SET(id, 1,2,3,4,5
使用 find_in_set 函數(shù)一次返回多條記錄 id 是一個表的字段,然后每條記錄分別是 id 等于 1,2,3,4,5 的時候 有點類似 in(集合)
select * from treenodes where id in (1,2,3,4,5);
——————————————————–
find_in_set()和 in 的區(qū)別:
弄個測試表來說明兩者的區(qū)別
CREATE TABLE `tb_test` ( `id` int(8) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`list` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
INSERT INTO `tb_test` VALUES (1, name , daodao,xiaohu,xiaoqin
INSERT INTO `tb_test` VALUES (2, name2 , xiaohu,daodao,xiaoqin
INSERT INTO `tb_test` VALUES (3, name3 , xiaoqin,daodao,xiaohu
原來以為 mysql 可以進行這樣的查詢:
SELECT id,name,list from tb_test WHERE daodao IN(list); -- (一)
實際上這樣是不行的,這樣只有當 list 字段的值等于 daodao 時(和 IN 前面的字符串完全匹配),查詢才有效,否則都得不到結果,即使 daodao 真的在 list 中。
再來看看這個:
SELECT id,name,list from tb_test WHERE daodao IN (libk , zyfon , daodao -- (二)
這樣是可以的。
這兩條到底有什么區(qū)別呢?為什么第一條不能取得正確的結果,而第二條卻能取得結果。原因其實是(一)中 (list) list 是變量,而(二)中 (libk , zyfon , daodao)是常量。
所以如果要讓(一)能正確工作,需要用 find_in_set():
SELECT id,name,list from tb_test WHERE FIND_IN_SET(daodao ,list); -- (一)的改進版
總結:
所以如果 list 是常量,則可以直接用 IN,否則要用 find_in_set()函數(shù)。
——————————————————–
find_in_set()和 like 的區(qū)別:
在 mysql 中,有時我們在做數(shù)據(jù)庫查詢時,需要得到某字段中包含某個值的記錄,但是它也不是用 like 能解決的,使用 like 可能查到我們不想要的記錄,它比 like 更精準,這時候 mysql 的 FIND_IN_SET 函數(shù)就派上用場了,下面來看一個例子。
創(chuàng)建表并插入語句:
CREATE TABLE users( id int(6) NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
limits VARCHAR(50) NOT NULL, -- 權限
PRIMARY KEY (id)
INSERT INTO users(name, limits) VALUES( 小張 , 1,2,12
INSERT INTO users(name, limits) VALUES(小王 , 11,22,32
其中 limits 表示用戶所擁有的權限(以逗號分隔),現(xiàn)在想查詢擁有權限編號為 2 的用戶,如果用 like 關鍵字的話,則查詢結果如下:
SELECT * FROM users WHERE limits LIKE %2%
這樣第二條數(shù)據(jù)不具有權限 2 的用戶也查出來了,不符合預期。下面利用 mysql 函數(shù) find_in_set()來解決。
SELECT * FROM users WHERE FIND_IN_SET(2,limits);
這樣就能達到我們預期的效果,問題就解決了!
注意:mysql 字符串函數(shù) find_in_set(str1,str2)函數(shù)是返回 str2 中 str1 所在的位置索引,str2 必須以 , 分割開。
總結:like 是廣泛的模糊匹配,字符串中沒有分隔符,F(xiàn)ind_IN_SET 是精確匹配,字段值以英文”,”分隔,F(xiàn)ind_IN_SET 查詢的結果要小于 like 查詢的結果。
上述就是丸趣 TV 小編為大家分享的 find_in_set()函數(shù)怎么在 mysql 中使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業(yè)資訊頻道。
向 AI 問一下細節(jié)