find_in_set 函数的语法
find_in_set 函数的语法:
FIND_IN_SET(str,strList)
- str 要查询的字符串
- strList 字段名,参数以“,”分隔,如(1,2,6,8)
- 查询字段(strList)中包含的结果,返回结果null或记录。
假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
例子一 基础用法
1
select find_in_set('1','1,2,3,4,5,6');
2
select find_in_set('2','1,2,3,4,5,6');
0
select find_in_set('7','1,2,3,4,5,6');
0
select find_in_set('2','1,21,3,4,5,6');
0
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的区别
创建表,并添加数据
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');
查询一
SELECT * from tb_test where "daodao" in (list);
结果
解析:
实际上这样是不行的,这样只有当list字段的值等于'daodao'时(和IN前面的字符串完全匹配),查询才有效,否则都得不到结果,即使'daodao'真的在list中。
SELECT * from tb_test where "daodao,xiaohu,xiaoqin" in (list);
执行上面这条语句,才能返回结果。
查询二
SELECT * from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao')
结果
解析:
这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。原因其实是(一)中 (list) list是变量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。
查询三
SELECT * from tb_test where FIND_IN_SET("daodao",list)
结果
解析:
find_in_set 函数 这里的“list” 是 变量
例子三 find_in_set()和like的区别
在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_SET函数就派上用场了
创建表,并插入数据
CREATE TABLE users(
id int(6) NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
limits VARCHAR(50) NOT NULL, -- 权限
PRIMARY KEY (id)
);
INSERT INTO users(name, limits) VALUES('小张','1,2,12');
INSERT INTO users(name, limits) VALUES('小王','11,22,32');
其中limits表示用户所拥有的权限(以逗号分隔),现在想查询拥有权限编号为2的用户,如果用like关键字的话,则查询结果如下:
SELECT * FROM users WHERE limits LIKE '%2%';
很显然,结果不符合预期,下面用find_in_set 函数 来 解决。
SELECT * from users where FIND_IN_SET('2',limits)
解析:
mysql字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以","分割开。
总结:like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。
例子四
···
select t.id from
(
select 1 as id, 'nick' as name
union all
select 2 as id, 'viki' as name
union all
select 3 as id, 'robin' as name
union all
select 4 as id, 'teng' as name
union all
select 5 as id, 'mike' as name
union all
select 6 as id, 'will' as name
) t
where find_in_set(t.id, '2,3,4') > 0;
···
结果
作者:lconcise
链接:https://www.jianshu.com/p/b2c1ba0ba34f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
find_in_set 函数的语法的更多相关文章
- mysql中find_in_set()函数的使用
首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...
- MySQL 的 find_in_set 函数使用方法
举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文...1,12,13 等等 . 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1, ...
- mysql 的 find_in_set函数使用方法
举个例子来说: 有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1 ...
- (转)mysql 的 find_in_set函数使用方法
举个例子来说: 有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1 ...
- mysql find_in_set函数详解
Mysql函数FIND_IN_SET()的使用方法 有了FIND_IN_SET这个函数.我们可以设计一个如:一只手机即是智能机,又是Andriod系统的. 比如:有个产品表里有一个type字段,他存储 ...
- find_in_set 函数使用方法
find_in_set 函数使用方法 个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文...1,12,13 等等 . 现在有篇文章他既是 头条,又是 ...
- MySql --FIND_IN_SET() 函数 (转)
例子:https://www.jianshu.com/p/b2c1ba0ba34f 举个例子来说:有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11 ...
- MySQL的FIND_IN_SET()函数
今天在做项目时,看到了一个从没见过的MySQL函数——FIND_IN_SET(),顿时就产生了浓郁的兴趣,然后就搜了搜,翻了翻. 语法:FIND_IN_SET(str,strlist) 定义: 1. ...
- mysql find_in_set()函数的使用
mysql 中 find_in_set() 函数语法: FIND_IN_SET(str,strList) str 要查询的字符串 strList 字段名,参数以“,”分隔,如(1,2,6,8) 查询字 ...
随机推荐
- 项目开发git-短信验证-redis数据库
项目开发git操作 基本流程 """ 1.开发前,拉一次远程仓库 2.工作区进行开发 3.将开发结果提交到本地版本库 - git status查看时没有待处理的事件 4. ...
- oracle学习笔记(六)——函数&存储过程的异同
我看的书上除了能看出来函数有返回值,存储过程没有,其他啥也看不出来... 网上大大的总结
- MySQL--事务控制和锁定语句
MySQL 支持对 MyISAM 和 MEMORY 存储引擎的表进行表级锁定,对 BDB 存储引擎的表进行页级锁定,对 InnoDB 存储引擎的表进行行级锁定.默认情况下,表锁和行锁都是自动获得的,不 ...
- 解决 nginx 启动错误 nginx: [emerg] host not found in upstream
解决办法来自于:https://blog.csdn.net/Hreticent/article/details/86074502 感谢这个朋友简单而清晰的解决办法. 在配置nginx支持PHP的时候, ...
- 关于RL78 系列的bootloader
1.充分了解芯片FLASH结构分布,对FLASH进行分区 2.熟练使用FSL库 3.调试中断映射功能 4.调试一种通信方式,UART,CAN等 5.对FLASH进行编程,执行跳转APP程序,调试一个多 ...
- (vshadow)Volume Shadow在渗透测试中的利用
本文根据嘶吼学习总结出文中几种方式Vshadow包含在window SDK中,由微软签名. Vshadow包括执行脚本和调用支持卷影快照管理的命令的功能,这些功能可能会被滥用于特权级的防御规避,权限持 ...
- sd卡分区步骤
1.将sd卡通过优盘插在电脑上 2.fdisk /dev/sdb 3. m //帮助 d //删除分区 4. n //添加新的分区. p //默认主分区 回车 +400M ...
- MySQL数据库中索引的数据结构是什么?(B树和B+树的区别)
B树(又叫平衡多路查找树) 注意B-树就是B树,-只是一个符号. B树的性质(一颗M阶B树的特性如下) 1.定义任意非叶子结点最多只有M个儿子,且M>2: 2.根结点的儿子数为[2, M]: 3 ...
- Relative-Frequency|frequency|pie chart |bar chart
2.2Organizing Qualitative Data The number of times a particular distinct value occurs is called its ...
- Reveal详细安装教程
Reveal的详细安装使用 标签: Reveal 工具 调试 iOS 一.终端的操作 首先最重要的一点,要先把Reveal软件放到Application中,否则路径是错的,后面的设置也就没有作用了 打 ...