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查询的结果

根据上面示例总结:

  1. FIND_IN_SET(arg1,arg2)中arg1代表我们要查找的字符串,arg2代表中我们要匹配的列名。

  2. 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介绍的更多相关文章

  1. Mysql函数FIND_IN_SET()的使用方法

    有了FIND_IN_SET这个函数.我们可以设计一个如:一只手机即是智能机,又是Andriod系统的. 比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1.智能机,2.Andri ...

  2. coding++ :MySQL函数——FIND_IN_SET()

    语法:FIND_IN_SET(str,strlist) 定义: 1). 假如字符串 str 在由N子链组成的字符串列表 strlist 中,则返回值的范围在1到N之间. 2). 一个字符串列表就是一个 ...

  3. 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 ...

  4. mysql中find_in_set()函数的使用

    首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...

  5. MySQL的FIND_IN_SET()函数

    今天在做项目时,看到了一个从没见过的MySQL函数——FIND_IN_SET(),顿时就产生了浓郁的兴趣,然后就搜了搜,翻了翻. 语法:FIND_IN_SET(str,strlist) 定义: 1. ...

  6. mysql中FIND_IN_SET函数用法

    本篇文章主要介绍mysql中FIND_IN_SET函数用法,用来精确查询字段中以逗号分隔的数据 以及其与 like 和 in 的区别 1.问题发现 之前在做工作任务时有这么一个需求:需要用接口所传的服 ...

  7. MySQL 的 find_in_set 函数使用方法

    举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文...1,12,13 等等 . 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1, ...

  8. mysql 的 find_in_set函数使用方法

    举个例子来说: 有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1 ...

  9. 一天一个mysql函数(二) FIND_IN_SET()

    in和FILD_IN_SET() 的区别: select id, list, name from table where FIND_IN_SET( 'daodao' , list) 所以如果list是 ...

随机推荐

  1. 一次 Young GC 的优化实践(FinalReference 相关)

    本文转载自公众号:涤生的博客,阅读时间大约需要11分钟.涤生的文章看起来跟破案一样,很精彩,很有启发. 前言 博客已经好久没有更新了,主要原因是 18 年下半年工作比较忙,另外也没有比较有意思的题材, ...

  2. IVS_原理

    智能视频分析技术指计算机图像视觉分析技术,是人工智能研究的一个分支,它在图像及图像描述之间建立映射关系,从而使计算机能够通过数字图像处理和分析来理解视频画面中的内容.智能视频分析技术涉及到模式识别.机 ...

  3. C#8.0——异步流(AsyncStream)

    异步流(AsyncStream) 原文地址:https://github.com/dotnet/roslyn/blob/master/docs/features/async-streams.md 注意 ...

  4. HBase的部署与其它相关组件(Hive和Phoenix)的集成

    HBase的部署与其它相关组件(Hive和Phoenix)的集成 一.HBase部署 1.1.Zookeeper正常部署 首先保证Zookeeper集群的正常部署,并启动之: /opt/module/ ...

  5. 【前端_js】Bootstrap之表单验证

    Bootstrap表单验证插件bootstrapValidator使用方法整理 BootstrapValidator 表单验证超详细教程    

  6. AI的自学题库-竞赛-基础知识

    阿里云(天池): https://tianchi.aliyun.com/course?spm=5176.12281897.0.0.209439a9UwObn3 天池竞赛:https://tianchi ...

  7. Apache/Nginx的web网页访问加密

  8. 移动端 1px 像素边框问题的解决方案(Border.css)

    前言 关于什么是移动端1像素边框问题,先上两张图,大家就明白了. 解决方案 将以下代码放在border.css文件中,然后引入 常用className border:整个盒子都有边框 border-t ...

  9. 项目Beta冲刺(团队)——05.26(4/7)

    项目Beta冲刺(团队)--05.26(4/7) 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:记录Beta敏捷冲刺第4 ...

  10. SpringBoot简便地打成一个war包

    正常情况下SpringBoot项目是以jar包的形式,通过命令行: java -jar demo.jar 来运行的,并且SpringBoot是内嵌Tomcat服务器,所以每次重新启动都是用的新的Tom ...