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

=====================================================================

微信公众号:

最新文章

  1. Python 简易聊天机器人
  2. ORACLE 导入导出
  3. WPF资源字典的使用【转】
  4. AXIS 调用 webservice服务时传递 服务器验证需要的用户名密码
  5. 【java消息格式化】使用MessageFormat进行消息格式化
  6. avalon2学习教程09循环操作
  7. PHP json编码遇到的问题
  8. PHP实例学习之————MVC架构模式分析与设计
  9. vim 7.4 编译安装
  10. c# .net使用SqlDataReader注意的几点
  11. DevExpress 12.1 换肤 超级简单的方法(2013-11-5版)
  12. 异步编程和线程的使用(.NET 4.5 )
  13. es6箭头函数讲解
  14. golang 标准库间依赖的可视化展示
  15. Hibernate(或其它ORM)里的inverse用法详解,内容摘自Java web轻量级开发面试教程
  16. iOS12 XCode10更新
  17. JavaEE 之 文件上传
  18. 【HTML5】video 标签禁用自带的下载按钮
  19. scala 与 java 之间的关系
  20. 自己写的一个delphi正整数快速排序

热门文章

  1. 汽车制造商表态:必须依靠MES系统来管控流程
  2. JS案例 - 分页
  3. 初探PHP设计模式
  4. jperf windows
  5. windows定时器编程
  6. centos下导入mysql数据库
  7. Unity基础功能:粒子特效(Shuriken)
  8. Pytorch autograd,backward详解
  9. driver.implicitly_wait()与time.sleep()的区别
  10. 关于__int 128 的读入与输出