O MySQL tem várias funções de string que retornam a posição de uma substring dentro de uma string. Mais especificamente, eles retornam a posição da primeira ocorrência dentro da string (ou a primeira ocorrência após um determinado ponto de partida).
As funções a que me refiro são as seguintes:
INSTR()
LOCATE()
POSITION()
Abaixo está uma visão geral de cada um.
INSTR()
O
INSTR()
A função retorna a primeira ocorrência de uma substring dentro de uma string. Aqui está a sintaxe:
INSTR(str,substr)
Onde
str
é a string que você deseja pesquisar e substr
é a substring que você está procurando. Exemplo
SELECT INSTR('Cats and dogs like to run', 'dogs') AS Result;
Resultado:
+--------+ | Result | +--------+ | 10 | +--------+
Neste caso, a string
dogs
começa na posição 10. Se a substring não for encontrada, um resultado de
0
é retornado:SELECT INSTR('Cats and dogs like to run', 'rabbit') AS Result;
Resultado:
+--------+ | Result | +--------+ | 0 | +--------+
LOCATE()
O
LOCATE()
a função funciona de maneira semelhante, exceto por algumas diferenças; os argumentos estão em uma ordem diferente e você pode fornecer um terceiro parâmetro opcional para indicar onde iniciar a pesquisa. Portanto, você pode usá-lo de uma das seguintes maneiras:
LOCATE(substr,str) LOCATE(substr,str,pos)
A primeira sintaxe é como o
INTSR()
sintaxe, exceto que str
e substr
são trocados. A segunda sintaxe adiciona o opcional
pos
argumento, que permite especificar uma posição para iniciar a pesquisa. Exemplo da primeira sintaxe
Aqui está um exemplo usando a primeira sintaxe:
SELECT LOCATE('dogs', 'Cats and dogs like to run') AS Result;
Resultado:
+--------+ | Result | +--------+ | 10 | +--------+
Exemplo de segunda sintaxe
Aqui está um exemplo em que especificamos uma posição inicial para iniciar a pesquisa:
SELECT LOCATE('cat', 'Cats, cats, and more cats!', 6) AS Result;
Resultado:
+--------+ | Result | +--------+ | 7 | +--------+
Podemos ver que a string
cat
pode ser encontrado na posição 1, mas especificamos 6
como a posição inicial. Portanto, a posição da próxima ocorrência dessa string foi a que foi retornada. Assim como o
INSTR()
função, se a substring não for encontrada, 0
é devolvido. POSIÇÃO()
A
POSITION()
função é um sinônimo para LOCATE()
, mas com uma sintaxe ligeiramente diferente. Aqui está a sintaxe:
POSITION(substr IN str)
Este é um sinônimo para o seguinte:
LOCATE(substr,str)
Assim, poderíamos reescrever um dos exemplos anteriores da seguinte forma:
SELECT POSITION('dogs' IN 'Cats and dogs like to run') AS Result;
Resultado:
+--------+ | Result | +--------+ | 10 | +--------+