MySQL如何匹配数组字段中的某一个具体值!

MySQL如何匹配数组字段中的某一个具体值!

 

在数据库操作中,有时需要查询数组字段中包含特定值的数据,传统like查询可能会带来错误结果,如查询包含数字1的数组可能错误返回包含数字10的结果,为此,可以使用MySQL的FIND_IN_SET函数或REGEXP正则表达式进行精确匹配,FIND_IN_SET适用于匹配单个固定值。

+

 

应用背景

业务表中的某个字段存储的值为数组,例如 1,2,3 。

现在需要查询其中一个值是数组里面的对应的一个值,该如何匹配。

006fRELkly4hyhylbdnicj30ec03st8q

就比如subject这个字段为一个数组,现在需要查询subject包含1的学生。

 

使用模糊查询的问题

因为subject里面存的不是具体的一个值,所以使用=显然是不行的,这个时候大家首先会想到like的模糊查询,我们一起来看看效果

1

2

3

4

5

6

SELECT

*

FROM

`stu_c`

WHERE

subject LIKE '%1%'

执行结果
20250212042
可以看到将张三跟王五都查出来了,这显然跟我们的需求不符,需求是只包含1的,应该只查出来张三这条数据才对。

 

解决方案一

使用mysql中的FIND_IN_SET(str,fieldName)函数,str是要查询的字符串,fieldName是字段名,参数以“,”分隔,例如1,2,3

匹配单个(只包含1)sql语句如下

1 SELECT * FROM stu_c WHERE FIND_IN_SET('1', subject) > 0

匹配单个(只包含1)执行结果
20250212041
查出了subject包含1的学生信息

匹配多个(包含1跟3)sql语句如下

1

2

SELECT * FROM stu_c

WHERE FIND_IN_SET('1', subject) > 0 OR FIND_IN_SET('3', subject) > 0;

匹配多个(包含1跟3)执行结果
20250212040
查出了subject包含1跟3的学生信息

 

解决方案二

使用REGEXP正则表达式匹配,REGEXP语法更加强大,功能更全,可以根据不同的需求选择不同的用法,本文主要讲查询包含这个字符的数据

匹配单个(只包含1)sql语句如下

1

2

3

4

5

6

SELECT

*

FROM

`stu_c`

WHERE

CONCAT ( ',', subject, ',' ) REGEXP ',(1),'

匹配单个(只包含1)执行结果
20250212039
查出了subject包含1的学生信息

匹配多个(包含1跟3)sql语句如下

1

2

3

4

5

6

SELECT

*

FROM

`stu_c`

WHERE

CONCAT ( ',', subject, ',' ) REGEXP ',(1|3),'

匹配多个(包含1跟3)执行结果
20250212038
查出了subject包含1跟3的学生信息

 

总结

两种方式都能解决匹配数组字段中某一个具体值的问题,但是也有差异,有各自的优缺点,例如FIND_IN_SET(str,fieldName)函数,如果前端页面是多选项,也就是需要匹配满足多个值的情况,就需要使用or拼接sql,但是REGEXP只需要把参数转换为我们需要的格式(',(1|3),')即可。

如果项目需求只需匹配一个值,FIND_IN_SET函数直接在xml中使用就行,REGEXP仍需要将单个参数转换为特定的格式(,(1),)。

 

综上所述,单个值匹配建议用FIND_IN_SET函数,多个值匹配建议用REGEXP正则表达式。

以上为个人经验,希望能给大家一个参考。

 

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

Excelbook.cn Excel技巧 SQL技巧 Python 学习!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需129元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>