FIND_IN_SET(str,strList)
- str 要查詢的字符串
- strList 字段名,參數以“,”分隔,如(1,2,6,8)
- 查詢字段(strList)中包含的結果,返回結果null或記錄。
strList 字符串列表就是一個由一些被 ‘,’ 符號分開的子鏈組成的字符串.如果str不在strlist 或strlist 為空字符串,則返回值為 0 。如任意一個參數為NULL,則返回值為 NULL。這個函數在第一個參數包含一個逗號(‘,’)時將無法正常運行。
一、基礎用法
select find_in_set('1','1,2,3,4,5,6'); select find_in_set('2','1,2,3,4,5,6'); select find_in_set('7','1,2,3,4,5,6'); select find_in_set('2','1,21,3,4,5,6'); select find_in_set('1',''); null select find_in_set(null,'1,2,3,4,5,6'); null select find_in_set('1',null);
二、find_in_set() 和 in 的區別
例子:
INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
1.SELECT * from tb_test where "daodao" in (list);
這樣是查不出數據的,這樣只有當list字段的值等於'daodao'時(和IN前面的字符串完全匹配),查詢才有效,否則都得不到結果,即使'daodao'真的在list中。
2.SELECT * from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao')
解析:原因其實是(一)中 (list) list是變量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。
3.SELECT * from tb_test where FIND_IN_SET("daodao",list)
解析:find_in_set 函數 這里的“list” 是 變量
三、find_in_set() 和 like 的區別
like是廣泛的模糊匹配,字符串中沒有分隔符,Find_IN_SET 是精確匹配,字段值以英文”,”分隔,Find_IN_SET查詢的結果要小於like查詢的結果。
項目中根據地區標識查詢用到了find_in_set,但考慮到效率問題,最后還是做了調整用in來處理。
by:jiaofeifei