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是 ...
随机推荐
- android studio学习----打包
Gradle打包APP签名 默认情况下,debug被配置成使用一个debug keystory.debug keystory使用了默认的密码和默认key及默认的key密码.debug构建类型会自动使用 ...
- AttributeError: module 'tensorflow' has no attribute 'Session'
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_33440324/article/ ...
- Django rest framework 之版本
一.通过 QueryParameterVersioning 获取版本 通过 QueryParameterVersioning 从 get 请求中获取版本信息: 1.新建 app,名为 api,Proj ...
- Android Studio--Logcat
他只是坐在那里,嘴里说:“做这个!做那个!当然,什么都不会发生,光说不做是没有用的” --哈里·杜鲁门“论<总统的权利>” 移动端的技术演进愈演愈烈,原生突破口已被打破. flutter. ...
- kafaka可视化工具kafkatool
炒作就像动物世界的森林法则,专门攻击弱者,这种做法往往能够百发百中. ...
- 排序算法合集(C++实现)
摘要 排序操作在程序设计中是非常基础和常见的,也是算法的基础部分,我对几种常见的比较排序算法进行了整理. 暴力排序(violence sort) 思想:遍历数组,每次遍历都在未排序的部分找到最小元素的 ...
- Beta冲刺博客汇总(校园帮-追光的人)
所属课程 软件工程1916 作业要求 Beta冲刺博客汇总 团队名称 追光的人 作业目标 汇总Beta阶段的博客,方便查看 冲刺日志 Beta之前-凡事预则立(校园帮-追光的人)5-22 Beta冲刺 ...
- redis 哨兵集群原理及部署
复制粘贴自: https://www.cnblogs.com/kevingrace/p/9004460.html 请点击此链接查看原文. 仅供本人学习参考, 如有侵权, 请联系删除, 多谢! Redi ...
- wp_list_categories如何去掉前面的categories
我们可以通过<?php wp_list_categories(); ?>来调用所有分类,但是在前面会出现一个categories,对强迫症患者来说就是钉子,那就把它去掉吧,顺便让自己更熟悉 ...
- 关于vue+axios上传文件的踩坑分析
上传文件是每个前端开发者都会遇到的问题,在之前实习期做了一个上传文件的功能,当时没有彻底搞明白问题所在,现在重新复盘下. 1.使用formData来上传文件,没有使用axios上传文件,之前在学校有做 ...