亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

mysql中find_in_set()函數的使用及in()用法詳解

2024-07-25 19:08:38
字體:
來源:轉載
供稿:網友

MySQL手冊中find_in_set函數的語法解釋:

FIND_IN_SET(str,strlist)

str 要查詢的字符串 

strlist 字段名 參數以”,”分隔 如 (1,2,6,8,10,22) 

查詢字段(strlist)中包含(str)的結果,返回結果為null或記錄

假如字符串str在由N個子鏈組成的字符串列表strlist 中,則返回值的范圍在 1 到 N 之間。 一個字符串列表就是一個由一些被 ‘,' 符號分開的子鏈組成的字符串。如果第一個參數是一個常數字符串,而第二個是type SET列,則FIND_IN_SET() 函數被優化,使用比特計算。 如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數為NULL,則返回值為 NULL。這個函數在第一個參數包含一個逗號(‘,')時將無法正常運行。

看不懂概念也沒事,按下面類子:

例子1:

SELECT FIND_IN_SET('b', 'a,b,c,d');

結果:2

因為b 在strlist集合中放在2的位置 從1開始

select FIND_IN_SET('1', '1'); 返回 就是1 這時候的strlist集合有點特殊 只有一個字符串 其實就是要求前一個字符串 一定要在后一個字符串集合中才返回大于0的數

select FIND_IN_SET('2', '1,2'); 返回2select FIND_IN_SET('6', '1'); 返回0 strlist中不存在str,所以返回0。

find_in_set()和in的區別:

弄個測試表來說明兩者的區別

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); -- (一)

mysql,find_in_set(),函數,in()

實際上這樣是不行的, 這樣只有當list字段的值等于'daodao'時(和IN前面的字符串完全匹配),查詢才有效,否則都得不到結果,即使'daodao'真的在list中。

再來看看這個:

SELECT id,name,list from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao'); -- (二)

mysql,find_in_set(),函數,in()

這樣是可以的。

這兩條到底有什么區別呢?為什么第一條不能取得正確的結果,而第二條卻能取得結果。原因其實是(一)中 (list) list是變量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。

所以如果要讓(一)能正確工作,需要用

find_in_set():SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list); -- (一)的改進版

mysql,find_in_set(),函數,in()

總結: 

所以如果list是常量,則可以直接用IN, 否則要用find_in_set()函數。

也就是這兩個sql是查詢的效果是相同的:

SELECT * from C_PURCHASINGMASTERDATA where FIND_IN_SET(EKGRP,'C54,C02,C14,C60,C06,C61,C53,C51,C12,C08,C03,C07')SELECT * from C_PURCHASINGMASTERDATA where EKGRP in ('C54','C02','C14','C60','C06','C61','C53','C51','C12','C08','C03','C07')

但是如果第二句sql里面的值是傳入sql的一個變量字段,那么第二句sql就不好使了。要以實際情況決定用in還是用 find_in_set()函數 。

find_in_set()和like的區別:

主要的區別就是like是廣泛的模糊查詢,而 find_in_set() 是精確匹配,并且字段值之間用‘,'分開。

現在想查詢擁有角色編號為2的用戶,用like關鍵字查詢:

SELECT userid,username,userrole 角色 FROM `user` WHERE userrole LIKE '%2%';

結果: 

mysql,find_in_set(),函數,in()

用 find_in_set() 查詢:

SELECT userid,username,userrole 角色 FROM `user` WHERE find_in_set('2',userrole)

結果: 

mysql,find_in_set(),函數,in()

顯然用 find_in_set() 查詢得到的結果才是我們想要的結果。所以他倆的

主要的區別就是like是廣泛的模糊查詢;而 find_in_set() 是精確匹配,并且字段值之間用‘,'分開,Find_IN_SET查詢的結果要小于like查詢的結果。

mysql 中find_in_set()和in()用法比較

在mysql中in可以包括指定的數字,而find_in_set()用于特定的數據類型。

find_in_set 函數使用方法

個例子來說:

有個文章表里面有個type字段,它存儲的是文章類型,有 1頭條、2推薦、3熱點、4圖文...1,12,13 等等 。
現在有篇文章他既是 頭條,又是熱點,還是圖文,
type中以 1,3,4 的格式存儲。
那我們如何用sql查找所有type中有4圖文標準的文章呢??
這就要我們的 find_in_set 出馬的時候到了。

以下為引用的內容:

select * from article where FIND_IN_SET('4',type)

MySQL手冊中find_in_set函數的語法:

FIND_IN_SET(str,strlist)

假如字符串str 在由N 子鏈組成的字符串列表strlist 中,則返回值的范圍在 1 到 N 之間。
一個字符串列表就是一個由一些被 ‘,' 符號分開的子鏈組成的字符串。如果第一個參數是一個常數字符串,而第二個是type SET列,則 FIND_IN_SET() 函數被優化,使用比特計算。

如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數為NULL,則返回值為 NULL。這個函數在第一個參數包含一個逗號(‘,')時將無法正常運行。

mysql> SELECT FIND_IN_SET('b', 'a,b,c,d');

-> 2 因為b 在strlist集合中放在2的位置 從1開始

select FIND_IN_SET('1', '1'); 返回 就是1 這時候的strlist集合有點特殊 只有一個字符串 其實就是要求前一個字符串 一定要在后一個字符串集合中 才返回 大于0的數

select FIND_IN_SET('2', '1,2'); 返回2select FIND_IN_SET('6', '1'); 返回0

注意:

select * from treenodes where FIND_IN_SET(id, '1,2,3,4,5');

使用find_in_set函數一次返回多條記錄

id 是一個表的字段,然后每條記錄分別是id等于1,2,3,4,5的時候
有點類似in (集合)

select * from treenodes where id in (1,2,3,4,5);

弄個測試表來說明兩者的區別

CREATE TABLE `test` (`id` int(8) NOT NULL auto_increment,`name` varchar(255) NOT NULL,`list` varchar(255) NOT NULL,PRIMARY KEY (`id`))INSERT INTO `test` VALUES (1, 'name', 'daodao,www.49028c.com,xiaoqin');INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,www.49028c.com');

原來以為MySQL可以進行這樣的查詢:

select id, list, name from table where 'daodao' IN (list);

(一)

實際上這樣是不行的,這樣只有當name是list中的第一個元素時,查詢才有效,否則都得不到結果,即使'daodao'真的在list中。

再來看看這個:

select id, list, name from table where 'daodao' IN ('libk', 'zyfon', 'daodao');

(二)

這樣是可以的。
----------------------------------------------------------------
這兩條到底有什么區別呢?為什么第一條不能取得正確的結果,而第二條卻能取得結果。

原因其實是(一)中 (list) list是變量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。

所以如果要讓(一)能正確工作,需要用find_in_set():

select id, list, name from table where find_in_set('daodao',list);

(一)的改進版。

總結:

所以如果list是常量,則可以直接用IN, 否則要用find_in_set()函數。

以上所述是小編給大家介紹的mysql中find_in_set()函數的使用詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品久久久久久久玫瑰园| 国产精品1234| 国产免费亚洲高清| 欧美性xxxx极品hd满灌| 亚洲成成品网站| 中文字幕亚洲综合久久筱田步美| 久久久久一本一区二区青青蜜月| 日产精品久久久一区二区福利| 国产亚洲精品久久久久久777| 国产精品自在线| 日韩精品中文字幕在线观看| 精品亚洲精品福利线在观看| 毛片精品免费在线观看| 欧美有码在线观看视频| 亚洲美女喷白浆| 欧美日本黄视频| 97视频在线观看免费| 久久av红桃一区二区小说| 成人免费高清完整版在线观看| 亚洲精品欧美极品| 国产精品96久久久久久又黄又硬| 欧美色视频日本版| 亚洲欧美国产精品va在线观看| 日韩欧美福利视频| 欧美大片欧美激情性色a∨久久| 国内外成人免费激情在线视频| 欧美精品18videos性欧美| 亚洲图片欧美午夜| 国产v综合ⅴ日韩v欧美大片| 久久视频在线看| www.亚洲人.com| 亚洲九九九在线观看| 亚洲精品国精品久久99热一| 欧美成人午夜免费视在线看片| 久久噜噜噜精品国产亚洲综合| 国产脚交av在线一区二区| 亚洲精品www久久久| 亚洲香蕉av在线一区二区三区| 久热99视频在线观看| 日韩视频免费中文字幕| 亚洲国产91色在线| 欧美成人激情视频免费观看| www.欧美免费| 精品高清一区二区三区| 日韩中文字幕免费视频| 中文字幕精品—区二区| 国产日韩欧美另类| 国产欧美在线看| 亚洲国产婷婷香蕉久久久久久| 色偷偷偷亚洲综合网另类| 国产精品成熟老女人| 国产精品精品视频一区二区三区| 伊人伊成久久人综合网小说| 国产日韩欧美电影在线观看| 国产视频久久久| 欧美专区国产专区| 久久伊人免费视频| 欧美影院久久久| 国产精品成人av性教育| 久久久久久一区二区三区| 国产精品久久久久久久久久久新郎| 欧美人与物videos| 亚洲女人初尝黑人巨大| 欧美一级电影免费在线观看| 97视频人免费观看| 国产精品久久久久久婷婷天堂| 亚洲精品美女网站| 久久国产精品亚洲| 最新的欧美黄色| 一区二区三区四区在线观看视频| 蜜臀久久99精品久久久久久宅男| 国产精品自拍视频| 亚洲欧美在线一区| 5252色成人免费视频| 欧美美最猛性xxxxxx| 欧美国产亚洲视频| 亚洲成人免费在线视频| 三级精品视频久久久久| 热久久这里只有| 欧美床上激情在线观看| 日韩视频中文字幕| 国产91精品不卡视频| 91视频国产高清| 狠狠躁夜夜躁人人躁婷婷91| 日韩av最新在线| 久久久999国产| 亚洲精选中文字幕| 成人亚洲综合色就1024| 亚洲天堂第二页| 欧美与欧洲交xxxx免费观看| 在线国产精品视频| 日韩电影在线观看永久视频免费网站| 国产91精品高潮白浆喷水| 91成品人片a无限观看| 久久免费视频这里只有精品| 精品国产91久久久| 国产精品美腿一区在线看| 久久人人爽人人爽人人片av高清| 国产99久久精品一区二区永久免费| 欧美黑人极品猛少妇色xxxxx| 国产精品电影网站| 777777777亚洲妇女| 成人精品久久av网站| 亚洲娇小xxxx欧美娇小| 国产精品第8页| 国产日韩欧美在线视频观看| 国产精品极品尤物在线观看| 久久久久久久色| 欧美做爰性生交视频| 成人精品久久av网站| 九九精品视频在线观看| 日韩电影大全免费观看2023年上| 午夜美女久久久久爽久久| 亚洲第一网站男人都懂| 成人日韩在线电影| www国产精品com| 久久久精品国产| 91老司机精品视频| 国产日韩综合一区二区性色av| 一区二区三区国产在线观看| 97热在线精品视频在线观看| 欧美日韩国产丝袜另类| 国产精品成人免费视频| 欧美夫妻性生活xx| 久久精品亚洲国产| 高清欧美性猛交xxxx| 国色天香2019中文字幕在线观看| 韩国v欧美v日本v亚洲| 亚洲香蕉伊综合在人在线视看| 亚洲精品美女在线观看播放| 高清欧美电影在线| 韩剧1988免费观看全集| 久久精品国产久精国产一老狼| 欧美一区二区色| 成人444kkkk在线观看| 91在线观看免费网站| 国产色视频一区| 欧美性感美女h网站在线观看免费| 日韩美女免费观看| 欧美性xxxxhd| 国产亚洲成av人片在线观看桃| 精品五月天久久| 久久久久免费视频| 久久人人爽人人爽人人片亚洲| 欧美日韩免费看| 国产成人精品一区| 国产精品电影久久久久电影网| yw.139尤物在线精品视频| 国产精品美女久久久免费| 国产一区二区视频在线观看| 久久国产精品免费视频| 欧美午夜无遮挡| 少妇高潮久久久久久潘金莲| 国产日韩中文字幕在线| 九九精品在线播放| 国产精品美女免费看| 亚洲欧美日韩直播| 亚洲国产精品久久久| 国内精久久久久久久久久人| 亚洲精品国产美女| 久久这里只有精品99| 2019最新中文字幕| 91国内免费在线视频| 视频在线观看一区二区|