Dans MySQL, vous pouvez utiliser le FIND_IN_SET()
fonction pour renvoyer l'index d'un élément de liste donné dans une liste de chaînes (par exemple 'élément1, élément2, élément3,...').
La fonction prend deux arguments; la chaîne à rechercher et la liste à rechercher.
La syntaxe ressemble à ceci :
FIND_IN_SET(str,strlist)
Où str
est la chaîne que vous recherchez, et strlist
est la liste de chaînes à parcourir.
Exemple
Voici un exemple :
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | 2 | +--------+
Cela renvoie 2
car c'est la position de la chaîne Dog
dans la liste de chaînes.
Notez que seul l'index de la première occurrence est renvoyé. Donc s'il y avait une autre occurrence de Dog
après ce premier, on obtiendrait toujours le même résultat :
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | 2 | +--------+
Aucune correspondance
Lorsque la chaîne n'est pas trouvée, un résultat de 0
est renvoyé :
SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | 0 | +--------+
Et si le premier argument contient une virgule ?
La fonction ne renverra pas de résultat positif si le premier argument contient une virgule.
Voici un exemple :
SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | 0 | +--------+
Dans cet exemple, on pourrait s'attendre à ce qu'il renvoie un résultat positif (étant donné Cat,Dog
est en fait dans la liste), cependant, la virgule est utilisée comme séparateur dans la liste, et par conséquent, la correspondance de chaîne ne fonctionne pas.
Voir aussi Comment retourner la position d'un argument dans une liste d'arguments en utilisant le FIELD()
fonction.