我們在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必須以","分割開。
方法/步驟
-
使用語法:
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');
結果:
-