文章主要介紹了mysql中FIND_IN_SET()函數的使用以及in()用法詳解,須要的朋友能夠參考下mysql
MySQL手冊中FIND_IN_SET函數的語法解釋sql
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。這個函數在第一個參數包含一個逗號(‘,’)時將沒法正常運行
舉例說明bash
SELECT FIND_IN_SET('b', 'a,b,c,d');
返回結果是 2ide
select FIND_IN_SET(‘1’, ‘1’); 返回 就是1 這時候的strlist集合有點特殊 只有一個字符串 其實就是要求前一個字符串 必定要在後一個字符串集合中才返回大於0的數函數
select FIND_IN_SET('2', '1,2'); 返回2 select FIND_IN_SET('6', '1'); 返回0 strlist中不存在str,因此返回0。
建立表進行測試測試
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');
使用in查詢名字優化
SELECT id,name,list from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao'); -- (二)
使用find_in_set():查詢code
SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list); -- (一)的改進版
總結
使用in只能查詢常量,find_in_set 可以查詢一個字段blog
主要的區別就是like是普遍的模糊查詢,而 find_in_set() 是精確匹配,而且字段值之間用‘,'分開圖片