在工作中遇见过,对于新知识,在这里写一写文档。
1.作用
举个例子,也许不理解,在看完后面的SQL示例,再来看就明白了:
有个文章表里面有个type字段,它存储的是文章类型,有 1头条、2推荐、3热点、4图文等等 。
现在有篇文章他既是头条,又是热点,还是图文,type将怎么存储这个信息呢?
其实,在type中以 1,3,4 的格式存储,就可以表示这个文章的类型了。
虽然存储了,但是在查询中,怎么办呢?
例如:那我们如何用sql查找所有type中有4的图文类型的文章呢?因为4在type里面的一个小片段。
这个时候,就会用到这个函数。
select * from article where FIND_IN_SET('4',type)
2.语法
FIND_IN_SET(str,strlist)
参数:一个str,是查询的字符串,一个可能含有str的集合,是字段名。
返回值:null,或者记录
3.小测试
4.函数与in的区别
在读完这个案例的时候,能刚好的理解这个函数的意思,与使用场景。
SQL语句:
1 CREATE TABLE `tb_test` ( 2 `id` int(8) NOT NULL auto_increment, 3 `name` varchar(255) NOT NULL, 4 `list` varchar(255) NOT NULL, 5 PRIMARY KEY (`id`) 6 ); 7 8 INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin'); 9 INSERT INTO `tb_test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin,xiaoming'); 10 INSERT INTO `tb_test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu');
效果:
需求:
查找有xiaoming的记录。
方式:
SELECT id,name,list from tb_test WHERE FIND_IN_SET('xiaoming',list);
5.注意点
mysql字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以","分割开。这个在小示例中有过演示。