當我們需要對資料做篩選和查詢的時候,往往會涉及到篩選或者查詢包含某個字串的情況,下面列出幾個實現方法。
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
js判斷某字串是否包含某字串
使用string物件的方法 1.indexof 返回字串在字串中首次出現的位置。如果沒有返回 1。if nameslist i indexof 河南 1 2.search 返回乙個或多個匹配的字串,如果沒有找到任何匹配的子串,則返回 1。if nameslist i search 河南 1 3.ma...
PHP 判斷是否包含某字串
原文 php判斷字串的包含,可以使用php的內建函式 strstr,strpos,stristr直接進行判斷.也可以通過explode函式的作用寫乙個判斷函式 strstr 返回乙個從被判斷字元開始到結束的字串,如果沒有返回值,則不包含.stristr 它和strstr的使用方法完全一樣.唯一的區別...
mysql 判斷某欄位是否包含某特定字串
今天遇到寫功能時遇到乙個問題,資料庫中的字串為list形式,多個字串間逗號隔開 假如此時需要查詢該列中包含的 ssdc1 欄位的資料,理論上可以用如下函式 select from xx where ssdc code like ssdc1 select from xx where locate ss...