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 queINSTR()
aceita, mas na ordem inversa.
- O
LOCATE()
A função aceita um terceiro argumento opcional para especificar a posição inicial da pesquisa. OINSTR()
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.