zoukankan      html  css  js  c++  java
  • Mysql hql字符串字段中是否包含某个字符串,用 find_in_set

    有这样一个需求,在Mysql数据库字符串字段(权限)中,有范围在 1 到 N 之间代表不同权限的值,分别被‘,’分开,现在要取出具有某权限的所有成员列表。

    创建表:

    1	CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),name VARCHAR(20) NOT NULL,limits VARCHAR(50) NOT NULL);
    



    添加数据:

    1	INSERT INTO users(name, limits) VALUES('小张','1,2,12'); 
    2	INSERT INTO users(name, limits) VALUES('小王','11,22,32');
    



    Mysql 中有些字段是字符串类型的,如何查找其中包含某些字符的记录呢?

    方法一:

    1	mysql> SELECT * FROM users WHERE limits like "%2%"; 
    2	+----+----+--------+ 
    3	| id |name| limits | 
    4	+----+----+--------+ 
    5	|  1 |小张| 1,2,12 | 
    6	+----+----+--------+ 
    7	|  2 |小王|11,22,32| 
    8	+----+----+--------+ 
    9	2 row in set
    



    这样第二条数据不具有权限‘2’的用户也查出来了,不符合预期。所以就查阅了手册,利用mysql 字符串函数 find_in_set()。

    方法二:

    1	mysql> SELECT * FROM users WHERE find_in_set('2', limits); 
    2	+----+----+--------+ 
    3	| id |name| limits | 
    4	+----+----+--------+ 
    5	|  1 |小张| 1,2,12 | 
    6	+----+----+--------+ 
    7	1 row in set
    


    这样就能达到我们预期的效果,问题就解决了!

    注意:mysql字符串函数 find_in_set(str1,str2)函数是返回str2中str1所在的位置索引,str2必须以","分割开。

    在hql中是不能直接使用的,不过我们可以这样用:

     from User u where find_in_set('2', limits)>0 ;
    



    即‘>0’必须带上,否则会报错。

  • 相关阅读:
    两个python程序搞定NCBI数据搜索并将结果保存到excel里面
    在notepad++上如何配置Python C 以及 java
    初识pandas
    关于搜索全部文件和修改文件名的方法os.walk() 和os.listdir
    C算法--指针与函数参数
    C算法--指针与数组
    C算法--指针1
    C算法--函数
    C算法--string.h头文件
    C算法--字符数组
  • 原文地址:https://www.cnblogs.com/qiaoyihang/p/6166156.html
Copyright © 2011-2022 走看看