mysql判斷是否包含某字符串的方法

當我們需要對數據做篩選和查詢的時候,往往會涉及到篩選或者查詢包含某個字符串的情況,下面列出幾個實現方法。

like

like的用法肯定都很熟悉,它可以匹配字段以某字符串開始,以某字符串結尾,包含有某字符串,用法如下:like ‘string%’,like ‘%string’,like ‘%string%’

find_in_set

現在我們遇到這樣一個需求,字段裏面的值存儲形式是這樣的,‘12,15’,‘3,5,2,14’, ‘22,25,28,29’,然後需要判斷字段裏面是否有5這個值,如果我們使用like的話,肯定是得不到正確的結果

這裏我們來了解一下find_in_set,它是一個mysql字符串函數,用它就可以解決上面的問題,用法如下:find_in_set(5, 字段名稱) = 0表示該字段不含有5,find_in_set(5, 字段名稱) >= 1表示該字段含有5,舉個例子:

SELECT find_in_set('5',  '3,5,2,14') as test;
-> 2

 SELECT find_in_set('2', '22,25,28,29') as test;
-> 0

但是這裏面有個問題,如果你的字段存儲的值的形式是這樣的’[3,5,2,14]’,那麼使用find_in_set就會導致結果不正確

SELECT find_in_set('5', '[3,5,2,14]') as test;
-> 2

 SELECT find_in_set('3', '[3,5,2,14]') as test;
-> 0

這是因爲在find_in_set中,它是以,爲分割的,所以單獨查3是查不到的,應該查’[3’;

locate

它也是一個mysql字符串函數,方法如下:locate(單個字符串, 字段名稱),和find_in_set用法相似,那它倆有沒有區別的呢,看如下例子:

執行sql語句:

SELECT find_in_set('5', '3,5,2,14') as test;
-> 2

SELECT locate('5', '3,5,2,15') as test;
-> 3

但是它也有他的問題,也會導致結果不準確,如下:

SELECT locate('5', '22,25,28,29') as test;
-> 5

這裏locate是按字符串來計算的,一個字符串就是1,所以它會把你本來是一個數字的會給你算成多個字符串;

POSITION
它也是一個mysql字符串函數,方法如下:POSITION(單個字符串 in 字段名稱),和locate用法一樣,如下例子:

SELECT POSITION('5' in '3,5,2,14') as test;
-> 3

SELECT locate('5', '3,5,2,15') as test;
-> 3

INSTR
它也是一個mysql字符串函數,方法如下:INSTR(字段名稱, 單個字符串),和locate用法一樣,如下例子:

SELECT INSTR('3,5,2,14','5') as test;
-> 3

SELECT locate('5', '3,5,2,15') as test;
-> 3
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章