阅读:6800回复:0
Mysql中FIND_IN_SET()和IN使用区别
1、FIND_IN_SET (s1,s2)函数解析:
返回字符串s1在字符串列表s2中出现的位置,字符串列表是一个由多个‘,’分开的字符串组成的列表。如果s1不在s2或s2为空字符串,则返回值为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得到的结果为空,为什么呢?因为,mysql中In是比较等不等,此处‘list'是表中的一个字段,也就是变量,除非它的值刚好和name的值一样,否则返回的结果都为空。拿test1来说,也即把‘daodao'改为‘daodao,xiaohu,xiaoqin'才会匹配到第一条记。 test2返回三条数据,可能是我们刚好需要的。mysql中FIND_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。这个函数在第一个参数包含一个逗号(‘,')时将无法正常运行。 |
|