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

2021-09-29 04:28:13 字數 1811 閱讀 7128

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

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...