Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment renvoyer la position d'un élément de liste dans MySQL

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)

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.