MySQL函数find_in_set介绍
MySQL函数find_in_set介绍
数据库中的某个字段我十以字符存储的,同时又以","隔开的。如果想要查询这个字段中包含某个字符串该怎么查询?使用like?感觉不妥,如果使用like匹配可能会出问题比如“15”、“152”你要查询15只要包含15的都查询出来了,这不是我想要的。如果使用in()查询,不行不能够查询出需要匹配的值。百度了一下发现了find_in_set的方法。惊喜若狂,正是我需要的查询方法有增加了一个技能。
场景介绍
人有时会身兼数职,需要查找出其中担任某一职务的都有哪些人,如下面position字段,不同的职务用数字表示,多个职务以逗号隔开。
先要查找出担任1职务的人员,通过以下两种方式来查询。
方式一
采用模糊查询,匹配出1职务的记录,如下SQL:
select * from user where position like '%1%'
查询结果如下,仔细观察你会发现position为10的也被查出来了,但这个不符合业务要求。
方式二
采用in的记录,如下SQL【in查询相当于多个or条件的叠加】:
select * from user where position in (1)
方式三
采用的MySQL的的原生函数FIND_IN_SET(STR,数组)来查询,SQL如下:
select * from user where find_in_set(1,position)
查询结果如下,符合要求。
函数介绍
FIND_IN_SET(STR,strlist),注意其中strlist只识别英文逗号。
https://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_find-in-set
like是广泛的模糊匹配,字符串中没有分隔符
IN 后面是变量,且是模糊查询
Find_IN_SET 是精确匹配,字段值必须以英文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果
根据上面示例总结:
FIND_IN_SET(arg1,arg2)中arg1代表我们要查找的字符串,arg2代表中我们要匹配的列名。
FIND_IN_SET(arg1,arg2)中arg2中数据必须是要用 , 分割。
3. FIND_IN_SET(arg1,arg2)中arg1是跟arg2中以,分割进行全匹配的。
注意在hibernate中如果要使用需要按如下写【后面要加">0"】,不然会报错
@Override
public VideoType findVideoTypeRealId(String id) {
List parameters = new ArrayList();
String where = " find_in_set(?,REALID)>0";
parameters.add(id);
String sql = "";
return (VideoType)super.getObjectUnique(VideoType.class, null, where, parameters.toArray());
}
原文链接:https://blog.csdn.net/xueshao110/article/details/80606960
=====================================================================
博客地址:https://www.codepeople.cn
=====================================================================
微信公众号:
MySQL函数find_in_set介绍的更多相关文章
- Mysql函数FIND_IN_SET()的使用方法
有了FIND_IN_SET这个函数.我们可以设计一个如:一只手机即是智能机,又是Andriod系统的. 比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1.智能机,2.Andri ...
- coding++ :MySQL函数——FIND_IN_SET()
语法:FIND_IN_SET(str,strlist) 定义: 1). 假如字符串 str 在由N子链组成的字符串列表 strlist 中,则返回值的范围在1到N之间. 2). 一个字符串列表就是一个 ...
- mysql函数find_in_set()
SELECT FIND_IN_SET('b','a,b,c,d'); 结果:2 SELECT * from video where find_in_set(id,'1,2,3,4'); 查找id在‘1 ...
- mysql中find_in_set()函数的使用
首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...
- MySQL的FIND_IN_SET()函数
今天在做项目时,看到了一个从没见过的MySQL函数——FIND_IN_SET(),顿时就产生了浓郁的兴趣,然后就搜了搜,翻了翻. 语法:FIND_IN_SET(str,strlist) 定义: 1. ...
- mysql中FIND_IN_SET函数用法
本篇文章主要介绍mysql中FIND_IN_SET函数用法,用来精确查询字段中以逗号分隔的数据 以及其与 like 和 in 的区别 1.问题发现 之前在做工作任务时有这么一个需求:需要用接口所传的服 ...
- 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()
in和FILD_IN_SET() 的区别: select id, list, name from table where FIND_IN_SET( 'daodao' , list) 所以如果list是 ...
随机推荐
- 如何在macOS下调整磁盘分区大小?
可以在“macOS”下利用磁盘工具并且不抹掉主分区的情况下,随意更改磁盘分区大小的方法.“OS X”经过几次大版本升级以后,也改名为“macOS”,而且系统自带的“磁盘工具”无论是功能和界面也有很大的 ...
- Python xlrd模块读取Excel表中的数据
1.xlrd库的安装 直接使用pip工具进行安装(当然也可以使用pycharmIDE进行安装,这里就不详述了) pip install xlrd 2.xlrd模块的一些常用命令 ①打开excel文件并 ...
- CentOS6.7安装部署之Tomcat多实例
Tomcat单机多实例配置 操作前的准备:关闭防火墙,配置好IP地址,安装好JAVA环境 1.首先创建tomcat所有实例共同的工作目录/data/webapps以及tomcat所有实例的所在目录/d ...
- 【解决】Pod 状态一直 Terminating,Need to kill Pod
偶然查看服务时发现有个单副本的 pod 一直处于Terminating状态,已达 8 天之久,且手动删除删除不掉 [appuser@lyj 2019-09-20 14:35:36 ~]$ kubect ...
- 逆向破解之160个CrackMe —— 021
CrackMe —— 021 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- Bag of Tricks for Image Classification with Convolutional Neural Networks笔记
以下内容摘自<Bag of Tricks for Image Classification with Convolutional Neural Networks>. 1 高效训练 1.1 ...
- 异常sql处理
下面是在awr报告里面看到的有问题的sql,是9个变量的,在应用前台属于关联查询,在sqlplus里面手工执行检查实际执行情况如下: SELECT /*+ GATHER_PLAN_STATISTICS ...
- mysql免安装版本测试(mysql-5.7.18-winx64)
最近在某大学代课要安装mysql,由于他们的电脑机器不能用installer安装(具体原因我也不清楚,一点击就显示要结束进程),在查阅了资料之后在我的小笔记本上做了一把实验,下面记录过程 参考博客为: ...
- HTML5游戏引擎深度测评
https://zhuanlan.zhihu.com/p/20768495 最近看到网上一篇文章,标题叫做<2016年 最火的 15 款 HTML5 游戏引擎>.目前针对HTML5游戏的解 ...
- Can总线上的电平及物理层仲裁
CAN总线采用差分信号传输,通常情况下只需要两根信号线(CAN-H和CAN-L)就可以进行正常的通信.在干扰比较强的场合,还需要用到屏蔽地即CAN-G(主要功能是屏蔽干扰信号),CAN协议推荐用户使用 ...