MYSQL中FIND_IN_SET()函數的使用

文章主要介紹了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。

二、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');

在這裏插入圖片描述
使用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

find_in_set()和like的區別:

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

相關文章
相關標籤/搜索