mysql中FIND_IN_SET函数用法
本篇文章主要介绍mysql中FIND_IN_SET函数用法,用来精确查询字段中以逗号分隔的数据
以及其与 like 和 in 的区别
1.问题发现
之前在做工作任务时有这么一个需求:需要用接口所传的服务商编号和所开通的产品类型查询这张表中是否有此信息来做返回结果。
但公司的产品类型有多个,每个服务商可能开通了多个不同的产品类型,存入产品类型时用的是一个字段,用逗号分隔开存储。
这种场景下就需要精确查找其产品类型,我一开始想的是用 in 和 like 来实现,但实际使用后并不是这种效果...请看下文讲解~
2.解决问题
使用 in 实现
sql语句如下:
SELECT
agentNum
FROM
p4_agent_limit_merc_access a
WHERE
agentNum = #{agentNum} (传入的服务商编号)
AND #{productType} (传入的产品类型)
IN(a.productType);
但实际上这样写是查不到数据的,只有a.productType 字段的值等于传入的产品类型时(和IN前面的字符串完全匹配),这时查询才有效,否则是查不到结果的,即使a.productType 里面包含传入的产品类型。
使用 like 实现
sql语句如下:
SELECT
agentNum
FROM
p4_agent_limit_merc_access a
WHERE
agentNum = #{agentNum}
AND a.productType
LIKE concat('%',#{productType}, '%');
表面看上去这样写是没问题的,但你细品一下,就知道问题很大,因为like是广泛的模糊查询,但一个字符串里包含你要传入的值时,也能查出来,比如我们的产品类型productType有QPOS和POS,然而此次查询的服务商只开通了QPOS产品,我却传入了POS这个类型,用上述语句查询后也能查出这条结果,这就是问题所在,所以用like查询出的范围会更广,这样明显不合理,不是我们想要的结果...
使用FIND_IN_SET函数实现
首先介绍下 FIND_IN_SET函数:
FIND_IN_SET(str,strlist)
str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果,返回结果为null或记录
假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
介绍简单了解下就好,具体看怎么用,我的sql如下:
SELECT
agentNum
FROM
p4_agent_limit_merc_access a
WHERE
agentNum = #{agentNum}
AND FIND_IN_SET(#{productType},a.productType);
使用上述语句就可以精确查询出数据,实现需求。
再来看看FIND_IN_SET函数具体使用例子:
SELECT FIND_IN_SET('b', 'a,b,c,d'); 返回2
因为b 在strlist集合中放在2的位置 从1开始
select FIND_IN_SET('1', '1'); 返回 就是1 这时候的strlist集合有点特殊 只有一个字符串 其实就是要求前一个字符串 一定要在后一个字符串集合中 才返回 大于0的数
select FIND_IN_SET('2', '1,2'); 返回2
select FIND_IN_SET('6', '1'); 返回0
3.总结
当 a.productType 字段是常量时,则可以用 in 来实现。
当其为变量时,则必须要用FIND_IN_SET函数来实现了。
更多精彩功能请关注我的个人博客网站:https://liujian.cool
欢迎关注我的个人公众号:程序猿刘川枫

mysql中FIND_IN_SET函数用法的更多相关文章
- mysql中find_in_set()函数的使用
首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...
- MYSQL中 FIND_IN_SET 函数
每天掌握一点,你的知识财富就多一点 今天在维护项目的时候发现了个MYSQL的FIND_IN_SET函数,之前接触太浅,今天又涨点知识了.下面是做个测试 1.创建一张test表,并添加数据 2.编写s ...
- mysql中FIND_IN_SET函数的使用
有种需求,A和B是父子关系,B和C是父子关系,C与D亦是父子关系,以此类推,无限级 现在需要查询到某一级(包括本级)下面所有的,就需要用到FIND_IN_SET函数 select * from tab ...
- 013 mysql中find_in_set()函数的使用
在工作中遇见过,对于新知识,在这里写一写文档. 1.作用 举个例子,也许不理解,在看完后面的SQL示例,再来看就明白了: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点 ...
- mysql中group_concat函数用法
该函数返回带有来自一个组的连接的非NULL值的字符串结果.该函数是一个增强的Sybase SQL Anywhere支持的基本LIST()函数. 语法结构: GROUP_CONCAT([DISTINCT ...
- mySql中SUBSTRING_INDEX函数用法
SUBSTRING_INDEX(str,delim,count) 返回字符串 str 中在第 count 个出现的分隔符 delim 之前的子串.如果 count 是一个正数,返回从最后的(从左边开始 ...
- MySQL中count函数使用方法详解
count函数是用来统计表中或数组中记录的一个函数,下面我来介绍在MySQL中count函数用法与性能比较吧. count(*) 它返回检索行的数目, 不论其是否包含 NULL值. SELECT ...
- Mysql中FIND_IN_SET()和IN区别简析
来源:http://www.jb51.net/article/125744.htm 测试SQL: CREATE TABLE `test` ( `id` int(8) NOT NULL auto_inc ...
- mysql 中find_in_set()和in()用法比较
mysql 中find_in_set()和in()用法比较 在mysql中in可以包括指定的数字,而find_in_set()用于特定的数据类型. find_in_set 函数使用方法 个例子来说:有 ...
随机推荐
- React useEffect in depth
React useEffect in depth useEffect class DogInfo extends React.Component { controller = null state = ...
- SVG tada 🎉 animation effects
SVG tada animation effects symbol & use <svg viewBox="0 0 80 20" xmlns="http:/ ...
- javascript & global event & custom event
javascript & global event & custom event new CustomEvent object let event = new CustomEvent( ...
- Flutter: ValueListenableBuilder 内容与ValueListenable保持"同步"的窗口小部件
API 使用这个修改状态可以不用setState(). class _MyHomeState extends State<MyHome> { final ValueNotifier< ...
- “NGK公链+5G”——打造智慧城市
智慧城市目前被全球各国当成城市建设的重点,旨在城市在智能化的同时,还能给民众带来幸福感和安全感.随着5G的到来,城市智能化又到了一个新的高度.比如无人驾驶.无人机等方面将会产生质的变化,因为5G的加入 ...
- Redis常用数据类型及其存储结构(源码篇)
一.SDS 1,SDS源码解读 sds (Simple Dynamic String),Simple的意思是简单,Dynamic即动态,意味着其具有动态增加空间的能力,扩容不需要使用者关心.Strin ...
- 手把手教你Spring Boot整合Mybatis Plus和Swagger2
前言:如果你是初学者,请完全按照我的教程以及代码来搭建(文末会附上完整的项目代码包,你可以直接下载我提供的完整项目代码包然后自行体验!),为了照顾初学者所以贴图比较多,请耐心跟着教程来,希望这个项目D ...
- 搭建SSH框架
以下为链接地址:https://www.2cto.com/kf/201606/518341.html
- IDEA如何快速查看类中的属性和方法?
在idea中,当需要快速的查看一个类的所有属性和方法时,直接去代码中查看,就显得非常的麻烦,idea是有快捷键的,可显示所有的属性和方法,方法如下. 打开一个类,使用快捷键ALT+7,就可以在左侧看到 ...
- JS驼峰与下划线互转
1.下划线转驼峰 function underlineToHump(s){ var a = s.split("_"); var result = a[0]; for(var i=1 ...