MySQL 的 LOCATE() 函式和 FIND_IN_SET() 函式有什麼區別?


眾所周知,這兩個函式都用於在提供的引數中搜索字串,但它們之間存在一些顯著差異,如下所示:

  • FIND_IN_SET() 函式使用字串列表,該列表本身是一個包含用逗號分隔的子字串的字串。而 LOCATE() 函式包含一個字串,它將查詢其中子字串第一次出現的 位置(如果存在)。
  • 在 LOCATE() 函式中,我們可以透過提供一個可選的位置引數來管理搜尋的起點。而對於 FIND_IN_SET() 函式,MySQL 並沒有提供這種靈活性,搜尋預設從第一個字串開始。
  • 對於整數,FIND_IN_SET() 比 LOCATE() 函式更合適。可以透過以下示例理解:

示例

mysql> Select IF(LOCATE(2,'10,11,12,13') > 0,1,0) As result;
+--------+
| result |
+--------+
|      1 |
+--------+
1 row in set (0.05 sec)

mysql> Select IF(FIND_IN_SET(2,'10,11,12,13') > 0,1,0)As Result;
+--------+
| Result |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)

從上面的示例結果集可以看出,即使字串“2”不存在於引數中,LOCATE() 函式也會返回 1。但 FIND_IN_SET() 函式返回 0,這是正確的答案。

更新於:2020年2月3日

453 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告