數據庫中的某個字段我十以字符存儲的,同時又以","隔開的。若是想要查詢這個字段中包含某個字符串該怎麼查詢?使用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查詢的結果
FIND_IN_SET(arg1,arg2)中arg1表明咱們要查找的字符串,arg2表明中咱們要匹配的列名。
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
=====================================================================
微信公衆號: