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是 ... 
随机推荐
- Api测试-为postman自动添加cookie
			使用postman来调试接口,会被buc-sso-csrf等拦截,需要自己挨个添加cookie,但是cookie又有失效时间,所以本篇介绍如何使用插件来自动获取cookie进行接口api测试 一.安装 ... 
- golang reflect知识集锦
			目录 反射之结构体tag Types vs Kinds reflect.Type vs reflect.Value 2019/4/20 补充 reflect.Value转原始类型 获取类型底层类型 遍 ... 
- 大数据:Hadoop(HDFS 的设计思路、设计目标、架构、副本机制、副本存放策略)
			一.HDFS 的设计思路 1)思路 切分数据,并进行多副本存储: 2)如果文件只以多副本进行存储,而不进行切分,会有什么问题 缺点 不管文件多大,都存储在一个节点上,在进行数据处理的时候很难进行并行处 ... 
- 小型SSM项目出现Failed to load ApplicationContext错误的解决方法(个人向)
			使用单元测试的时候,出现了Failed to load ApplicationContext错误,在添加了一个新的Mapper.xml文件才出现的,在保证其他配置文件没有出错的情况下,检查mapper ... 
- springboot java.awt.AWTException: headless environment
			修改启动类即可 @SpringBootApplicationpublic class SystemctlApplication { public static void main(String[] a ... 
- ansible之yum模块
			> YUM (/usr/lib/python2.7/site-packages/ansible/modules/packaging/os/yum.py) Installs, upgrade, d ... 
- version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
			在python中运行如下: $ python >>> import wx 输出:symbol _ZNSt7__cxx1112basic_stringIwSt11char_traits ... 
- Beta冲刺——用户使用调查报告
			项目Beta冲刺(团队) --用户使用调查报告 一.项目概述 1.1项目名称 卡战三国 1.2项目简介 一款休闲娱乐益智卡牌游戏 1.3 项目预期目标 开发一款基于三国题材的卡牌通关对战手机游戏 二. ... 
- 数组中有一个数字出现的次数超过数组长度的一半(C、Python)
			C语言 1 /* 2 ----------------------------------- 3 动态分配需要的内存大小 4 输入数组元素的值 5 通过函数调用,传地址对数组排序 6 循环每个元素,当 ... 
- c语言联合union的使用用途
			在使用联合的使用,我们通常用来判断大小端,但是其实不仅仅有这个用处. 我在网上看到还有其他的用途: 1.分离高低字节 这个需要结合cpu大小端来判断,原文如下: 这样的操作,而一个除法消耗四个机器周期 ... 
