mysql以","分隔的精確匹配方法?

我們在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)。

mysql以","分隔的精確匹配方法

舉個例子,首先建一個簡單的新聞表。

mysql以","分隔的精確匹配方法

錄入以下資料。

mysql以","分隔的精確匹配方法

現在我們想要獲取type為2這種型別的新聞。如果用like的話不好實現。因為12,2裡都包含了2.

這裡我們得用find_in_set來查詢:

語句:

select * from t_news where FIND_IN_SET(2,type);

看結果,我們就可以看出很容易就找到了對應的記錄。

mysql以","分隔的精確匹配方法

如果用like的話,會找到錯誤的記錄(我們不想要的記錄)。可見這裡的find_in_set還是很有用的。

mysql以","分隔的精確匹配方法

find_in_set(str1,str2)還可以查詢到str1所在str2中位置。

同樣適用上面的例子資料。

sql語句:

select FIND_IN_SET(2,type) from t_news

mysql以","分隔的精確匹配方法

還可以適用find_in_set來強制排序。

我們修改一下新聞表資料。

如圖:

mysql以","分隔的精確匹配方法

現在我們有一個需求,需要根據type為2,1,3這種順序排序。

sql語句:

select * from t_news order by find_in_set(type,'2,1,3');

結果:

mysql以","分隔的精確匹配方法

熱點, 型別, 函式, 新聞,
相關問題答案