MySQL函数find_in_set介绍

MySQL函数find_in_set介绍

数据库中的某个字段我十以字符存储的,同时又以","隔开的。若是想要查询这个字段中包含某个字符串该怎么查询?使用like?感受不妥,若是使用like匹配可能会出问题好比“15”、“152”你要查询15只要包含15的都查询出来了,这不是我想要的。若是使用in()查询,不行不可以查询出须要匹配的值。百度了一下发现了find_in_set的方法。惊喜若狂,正是我须要的查询方法有增长了一个技能。html

场景介绍

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

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

方式一

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

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

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

方式二

采用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只识别英文逗号。ide

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

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

微信公众号:

相关文章
相关标签/搜索