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

Como a função LOCATE() funciona no MySQL


No MySQL, o LOCATE() A função retorna a posição de uma substring dentro de uma string. Mais especificamente, ele retorna a posição da primeira ocorrência dentro da string, ou a primeira ocorrência após um determinado ponto de partida.


Sintaxe


Ele pode ser usado de uma das seguintes maneiras:
LOCATE(substr,str)
LOCATE(substr,str,pos)

Onde substr é a substring a ser localizada e str é a string a ser pesquisada.

Ao usar a segunda sintaxe, pos é a posição para começar a procurar.

Exemplo 1 – Primeira Sintaxe


Aqui está um exemplo usando a primeira sintaxe:
SELECT LOCATE('cat', 'One cat jumped over the other cat') AS Result;

Resultado:
+--------+
| Result |
+--------+
|      5 |
+--------+

Exemplo 2 – Segunda Sintaxe


Aqui está um exemplo em que especificamos uma posição inicial para iniciar a pesquisa:
SELECT LOCATE('cat', 'One cat jumped over the other cat', 6) AS Result;

Resultado:
+--------+
| Result |
+--------+
|     31 |
+--------+

Neste caso, a primeira ocorrência de cat começa na posição 5, mas especifiquei a busca para iniciar na posição 6. Portanto, a posição da próxima ocorrência dessa string foi a que foi retornada.

Observe que, embora a pesquisa tenha começado na posição 6, a função ainda retorna a posição da substring dentro da string – não a partir da posição inicial.

Aqui está outro exemplo para ajudar a tornar isso mais claro.
SELECT 
  LOCATE('c', 'a b c', 1) AS 'Result 1',
  LOCATE('c', 'a b c', 2) AS 'Result 2',
  LOCATE('c', 'a b c', 4) AS 'Result 3';

Resultado:
+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        5 |        5 |        5 |
+----------+----------+----------+

O resultado é o mesmo, não importa onde começamos a procurar.

Exemplo 3 – Localizando parte de uma palavra


A substring pode ser parte de uma palavra mais longa:
SELECT LOCATE('sing', 'Increasingly') AS Result;

Resultado:
+--------+
| Result |
+--------+
|      7 |
+--------+

Na verdade, não há exigência de que seja uma palavra (afinal, estamos simplesmente pesquisando uma string):
SELECT 
  LOCATE('z23!#', 'u_4, z23!#') AS 'Result 1',
  LOCATE(' ', 'a b c') AS 'Result 2',
  LOCATE(',', 'cat, dog, bird') AS 'Result 3';

Resultado:
+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        6 |        2 |        4 |
+----------+----------+----------+

Exemplo 4 – Sem correspondências


Se a substring não for encontrada, 0 é retornado:
SELECT LOCATE('Bat', 'Increasingly') AS Result;

Resultado:
+--------+
| Result |
+--------+
|      0 |
+--------+

Exemplo 5 - Sensibilidade entre maiúsculas e minúsculas


Essa função é multibyte segura e diferencia maiúsculas de minúsculas somente se pelo menos um argumento for uma string binária.

Portanto, o seguinte funciona em strings não binárias, mesmo que o caso não corresponda:
SELECT LOCATE('Sing', 'Increasingly') AS Result;

Resultado:
+--------+
| Result |
+--------+
|      7 |
+--------+

Mas se usarmos uma string binária, isso acontece:
SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('Sing', @str) AS Result;

Resultado:
+--------+
| Result |
+--------+
|      0 |
+--------+

Mas é claro que, se alterarmos para que o case corresponda, obteremos uma correspondência:
SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('sing', @str) AS Result;

Resultado:
+--------+
| Result |
+--------+
|      7 |
+--------+

Exemplo 6 – Argumentos NULL


Se algum dos argumentos for NULL , NULO é retornado:
SELECT 
  LOCATE(NULL, 'Increasingly') a,
  LOCATE('Bat', NULL) b,
  LOCATE('Bat', 'Increasingly', NULL) c;

Resultado:
+------+------+------+
| a    | b    | c    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+