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’必須帶上,否則會報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM