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.