MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

A diferença entre INSTR() vs LOCATE() no MariaDB


MariaDB tem um INSTR() função e também um LOCATE() função. Ambas as funções parecem fazer exatamente a mesma coisa – retornar a posição de uma substring dentro de uma string.

No entanto, há uma diferença.

As diferenças


Podemos ver a diferença entre essas duas funções observando sua sintaxe, bem como alguns exemplos.

Sintaxe


A sintaxe para INSTR() :
INSTR(str,substr)

As duas sintaxes aceitas para LOCATE() :
LOCATE(substr,str)
LOCATE(substr,str,pos)

Onde str é a string, substr é a substring a ser encontrada e pos é a posição para iniciar a pesquisa.

A diferença entre as duas funções pode ser resumida da seguinte forma:
  • O LOCATE() função aceita os mesmos dois argumentos que INSTR() aceita, mas na ordem inversa.
  • O LOCATE() A função aceita um terceiro argumento opcional para especificar a posição inicial da pesquisa. O INSTR() função não aceita tal argumento.

Então LOCATE() fornece funcionalidade extra que INSTR() não fornece.

Exemplo 1 – A primeira diferença


Aqui está um exemplo que mostra a ordem inversa em que as duas funções aceitam seus argumentos:
SELECT 
    INSTR('Disconnect', 'con'),
    LOCATE('con', 'Disconnect');

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

Exemplo 2 – A segunda diferença


Aqui está um exemplo que mostra a funcionalidade extra que LOCATE() fornece sobre 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";

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

Este exemplo destaca o fato de que o LOCATE() A função nos fornece um terceiro argumento opcional. Esse argumento nos permite especificar uma posição inicial para a pesquisa, o que significa que não estamos limitados apenas à primeira ocorrência em toda a string.