MariaDB 中 INSTR() 与 LOCATE() 之间的区别

发布于

MariaDB有一个函数,也是一个函数。这两个函数似乎做完全相同的事情——返回子字符串在字符串中的位置。[INSTR()](https://database.guide/how-instr-works-in-mariadb/ "How INSTR() Works in MariaDB")``[LOCATE()](https://database.guide/how-locate-works-in-mariadb/ "How LOCATE() Works in MariaDB")

但是,有区别。

差异

我们可以通过查看它们的语法以及几个示例来了解这两个函数之间的区别。

语法

的语法:INSTR()

INSTR(str,substr)

这两个接受的语法:LOCATE()

LOCATE(substr,str)
LOCATE(substr,str,pos)

其中 是字符串,是要查找的子字符串,是开始搜索的位置。str``substr``pos

这两个函数之间的区别可以总结如下:

  • 该函数接受与接受相同的两个参数,但顺序相反。LOCATE()``INSTR()

  • 该函数接受可选的第三个参数来指定搜索的起始位置。该函数不接受这样的参数。LOCATE()``INSTR()

因此提供了不提供的额外功能。LOCATE()``INSTR()

示例 1 – 第一个区别

以下示例显示了两个函数接受其参数的相反顺序:

SELECT 
    INSTR('Disconnect', 'con'),
    LOCATE('con', 'Disconnect');

输出:

+----------------------------+-----------------------------+
| INSTR('Disconnect', 'con') | LOCATE('con', 'Disconnect') |
+----------------------------+-----------------------------+
|                          4 |                           4 |
+----------------------------+-----------------------------+

示例 2 – 第二个区别

下面是一个示例,显示了提供的额外功能:LOCATE()``INSTR()

SELECT 
    INSTR('My cat is a good cat', 'cat') AS "INSTR()",
    LOCATE('cat', 'My cat is a good cat') AS "LOCATE()",
    LOCATE('cat', 'My cat is a good cat', 10) AS "LOCATE() with 3rd Argument";

输出:

+---------+----------+----------------------------+
| INSTR() | LOCATE() | LOCATE() with 3rd Argument |
+---------+----------+----------------------------+
|       4 |        4 |                         18 |
+---------+----------+----------------------------+

此示例突出显示了该函数为我们提供了可选的第三个参数的事实。此参数允许我们指定搜索的起始位置,这意味着我们不仅限于整个字符串中的第一个匹配项。LOCATE()