Dans MySQL, vous pouvez utiliser le FIELD()
fonction pour renvoyer la position d'une chaîne ou d'un nombre donné dans une liste d'arguments. La fonction renvoie l'indice (position) du premier argument dans la liste des arguments suivants.
La syntaxe ressemble à ceci :
FIELD(str,str1,str2,str3,...)
Où str
est l'élément que vous souhaitez rechercher, et str1,str2,str3,...
est la liste dans laquelle vous effectuez une recherche.
Voici un exemple :
SELECT FIELD('Homer', 'Marge', 'Homer', 'Bart') AS 'Where is Homer?';
Résultat :
+-----------------+ | Where is Homer? | +-----------------+ | 2 | +-----------------+
Dans cet exemple, la liste est :'Marge', 'Homer', 'Bart'
et nous recherchons la chaîne Homer
au sein de cette liste. Et parce que Homer
est le 2ème élément de la liste des arguments, le résultat est 2
.
Correspondance exacte
Notez qu'il doit s'agir d'une correspondance exacte, sinon il renverra 0
.
Par exemple, si nous supprimons le r
de Homer
, nous finissons par chercher Home
à la place :
SELECT FIELD('Home', 'Marge', 'Homer', 'Bart') AS 'Where is Home?';
Résultat :
+-----------------+ | Where is Home? | +-----------------+ | 0 | +-----------------+
Dans ce cas, même si Homer
contient Home
, ce n'est pas une correspondance exacte et le résultat est 0
.
Numéros
Le FIELD()
la fonction fonctionne aussi avec les nombres :
SELECT FIELD(1, 3, 2, 1) AS 'Where is 1?';
Résultat :
+-------------+ | Where is 1? | +-------------+ | 3 | +-------------+
Lorsque tous les arguments de FIELD()
sont des nombres, tous les arguments sont comparés comme des nombres. Si toutes sont des chaînes, elles sont comparées en tant que chaînes. S'ils sont mélangés, ils sont comparés au double.
Le FIELD()
la fonction est un complément à la ELT()
fonction, qui permet de retrouver un élément de la liste par sa position dans la liste.
Voir également Comment renvoyer la position d'un élément de liste à l'aide de FIND_IN_SET()
fonction.