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.