我們在sql中經常會遇到模糊匹配,但是有的地方卻不能簡單的用like來區分。比如有個新聞表裡面有個type欄位,他的儲存新聞型別,有 1頭條,2推薦....11娛樂,12熱點,13圖文...等等等等 現在有篇文章他既是 頭條,又是熱點,還是娛樂, type中以 2,12,11的格式儲存. 我們如何用sql查詢所有type中有2推薦類別的文章呢。這裡我們就可以用到find_in_set函式。精確的匹配到我們想要的記錄。
find_in_set(str1,str2) 函式:返回str2中str1所在的位置索引,其中str2必須以","分割開。
工具/原料
mysql
find_in_set(str,list)
方法/步驟
使用語法:
select * form table where FIND_IN_SET(str,strlist)。
舉個例子,首先建一個簡單的新聞表。
錄入以下資料。
現在我們想要獲取type為2這種型別的新聞。如果用like的話不好實現。因為12,2裡都包含了2.
這裡我們得用find_in_set來查詢:
語句:
select * from t_news where FIND_IN_SET(2,type);
看結果,我們就可以看出很容易就找到了對應的記錄。
如果用like的話,會找到錯誤的記錄(我們不想要的記錄)。可見這裡的find_in_set還是很有用的。
find_in_set(str1,str2)還可以查詢到str1所在str2中位置。
同樣適用上面的例子資料。
sql語句:
select FIND_IN_SET(2,type) from t_news
還可以適用find_in_set來強制排序。
我們修改一下新聞表資料。
如圖:
現在我們有一個需求,需要根據type為2,1,3這種順序排序。
sql語句:
select * from t_news order by find_in_set(type,'2,1,3');
結果: