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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.