MySQL函数find_in_set介绍

场景介绍

人有时会身兼数职,需要查找出其中担任某一职务的都有哪些人,如下面position字段,不同的职务用数字表示,多个职务以逗号隔开。

MySQL函数find_in_set介绍-LMLPHP

先要查找出担任1职务的人员,通过以下两种方式来查询。

方式一

采用模糊查询,匹配出1职务的记录,如下SQL:

select * from user where position like '%1%'

查询结果如下,仔细观察你会发现position为10的也被查出来了,但这个不符合业务要求。

MySQL函数find_in_set介绍-LMLPHP

方式二

采用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)

查询结果如下,符合要求。

MySQL函数find_in_set介绍-LMLPHP

函数介绍

FIND_IN_SET(STR,strlist),注意其中strlist只识别英文逗号。

MySQL函数find_in_set介绍-LMLPHP

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

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

微信公众号:

MySQL函数find_in_set介绍-LMLPHP

05-17 16:11