郭马龙
新手
新手
  • UID549
  • 粉丝0
  • 关注0
  • 发帖数2
阅读:6800回复:0

Mysql中FIND_IN_SET()和IN使用区别

楼主#
更多 发布于:2019-05-29 16:39
1FIND_IN_SET (s1,s2)函数解析:
返回字符串s1在字符串列表s2中出现的位置,字符串列表是一个由多个分开的字符串组成的列表。如果s1不在s2s2为空字符串,则返回值为0。如果任意一个参数为null,则返回值为null。这个函数在第一个参数包含一个逗号时将无法正常运行。

2、与in的区别:[table=417.6][tr][td=1,1,213]
id[/td][td=1,1,213]
name[/td][td=1,1,409]
list[/td][/tr][tr][td=1,1,213]
1[/td][td=1,1,213]
name[/td][td=1,1,409]
'daodao,xiaohu,xiaoqin'[/td][/tr][tr][td=1,1,213]
2[/td][td=1,1,213]
name2[/td][td=1,1,409]
'xiaohu,daodao,xiaoqin'[/td][/tr][tr][td=1,1,213]
3[/td][td=1,1,213]
name3[/td][td=1,1,409]
'xiaoqin,daodao,xiaohu'[/td][/tr][/table]
看以下两个查询语句
test1:sql = select * from `test` where 'daodao' IN (`list`);
test2:sql = select * from `test` where FIND_IN_SET('daodao',`list`);

上面的实验,test1得到的结果为空,为什么呢?因为,mysqlIn是比较等不等,此处‘list'是表中的一个字段,也就是变量,除非它的值刚好和name的值一样,否则返回的结果都为空。拿test1来说,也即把‘daodao'改为‘daodaoxiaohuxiaoqin'才会匹配到第一条记。
test2返回三条数据,可能是我们刚好需要的。mysqlFIND_IN_SET函数用来比较是不是包含,不管‘list'字段是变量或给定的字符串常量都能很好的工作。
MySQL中原型为:FIND_IN_SET(str,strlist)。 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 N 之间。 一个字符串列表就是一个由一些被‘,'符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,')时将无法正常运行。
游客

返回顶部