mysql中find in set 的使用

2021-10-14 06:40:21 字數 1482 閱讀 5032

mysql手冊中find_in_set函式的語法:

find_in_set(str,strlist)

str 要查詢的字串

strlist 欄位名 引數以」,」分隔 如 (1,2,6,8)

查詢字段(strlist)中包含(str)的結果,返回結果為null或記錄

假如字串str在由n個子鏈組成的字串列表strlist 中,則返回值的範圍在 1 到 n 之間。 乙個字串列表就是乙個由一些被 『,』 符號分開的子鏈組成的字串。如果第乙個引數是乙個常數字串,而第二個是type set列,則find_in_set() 函式被優化,使用位元計算。 如果str不在strlist 或strlist 為空字串,則返回值為 0 。如任意乙個引數為null,則返回值為 null。這個函式在第乙個引數包含乙個逗號(『,』)時將無法正常執行。

find_in_set()和in的區別

弄個測試表來說明兩者的區別

這樣只有當parent_ids欄位的值等於』36205』時(和in前面的字串完全匹配),查詢才有效,否則都得不到結果,即使』36205』真的在parent_ids中。

這兩條到底有什麼區別呢?為什麼第一條不能取得正確的結果,而第二條卻能取得結果。原因其實是(一)中 (parent_ids) parent_ids是變數, 而(二)中 (32428,36205,36209)是常量。

所以如果要讓(一)能正確工作,需要用find_in_set();

所以如果list是常量,則可以直接用in, 否則要用find_in_set()函式。

find_in_set()和like的區別

在mysql中,有時我們在做資料庫查詢時,需要得到某字段中包含某個值的記錄,但是它也不是用like能解決的,使用like可能查到我們不想要的記錄,它比like更精準,這時候mysql的find_in_set函式就派上用場了,下面來看乙個例子

like會把2和22都會查出來,而find_in_set就不會

ike是廣泛的模糊匹配,字串中沒有分隔符,find_in_set 是精確匹配,字段值以英文」,」分隔,find_in_set查詢的結果要小於like查詢的結果

mysql 中 FIND IN SET 的使用

表a和表b相互關聯,是一對多的關係,a中乙個記錄對應多個b中的記錄。要求在不建立中間表的情況下,通過a中的乙個字段可以找到多個b中的記錄。a id fid family 1 1,2,3 englishb id name 1 a 2 b 3 c表a中有一條記錄,記錄了english家族的三個字母,通過...

mysql中FIND IN SET的使用

在mysql中,有時我們在做資料庫查詢時,需要得到某字段中包含某個值的記錄,但是它也不是用like能解決的,使用like可能查到我們不想要的記錄,它比like更精準,這時候mysql的find in set函式就派上用場了,下面是find in set的使用方法。find in set str,st...

mysql中的find in set 函式

mysql中提供了乙個find in set 函式,用於檢索乙個字串在乙個字串集合 以逗號分隔的字串 中的位置,如果檢索到了,則返回該匹配的字串所在的位置 如果檢索不到,則返回0。find in set str,strlist 簡單例子 select find in set yanggb1 yang...