Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

3 maneiras de encontrar a posição de uma substring dentro de uma string no MySQL


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 |
+--------+