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

Como retornar a posição de um item de lista no MySQL


No MySQL, você pode usar o FIND_IN_SET() função para retornar o índice de um determinado item de lista dentro de uma lista de strings (por exemplo ‘item1, item2, item3,…’).

A função recebe dois argumentos; a string a ser localizada e a lista a ser pesquisada.

A sintaxe fica assim:
FIND_IN_SET(str,strlist)

Onde str é a string que você está procurando e strlist é a lista de strings para pesquisar.


Exemplo


Aqui está um exemplo:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';

Resultado:
+--------+
| Result |
+--------+
|      2 |
+--------+

Isso retorna 2 porque essa é a posição da string Dog dentro da lista de strings.

Observe que apenas o índice da primeira ocorrência é retornado. Então, se houvesse outra ocorrência de Dog depois desse primeiro, ainda obteríamos o mesmo resultado:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';

Resultado:
+--------+
| Result |
+--------+
|      2 |
+--------+

Nenhuma correspondência


Quando a string não for encontrada, um resultado de 0 é retornado:
SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';

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

E se o primeiro argumento contiver uma vírgula?


A função não retornará um resultado positivo se o primeiro argumento contiver uma vírgula.

Aqui está um exemplo:
SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';

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

Neste exemplo, pode-se esperar que ele retorne um resultado positivo (dado Cat,Dog está na lista), no entanto, a vírgula é usada como separador na lista e, portanto, a correspondência de string não funciona.

Veja também Como retornar a posição de um argumento dentro de uma lista de argumentos usando o FIELD() função.