Deux fonctions similaires dans MariaDB sont FIELD()
et FIND_IN_SET()
. À première vue, ils semblent faire la même chose, mais il y a une différence.
Cet article examine la différence entre ces deux fonctions.
Syntaxe et définitions
Voyons d'abord la syntaxe et la définition de chaque fonction :
Fonction | Syntaxe | Définition |
---|---|---|
FIELD() | FIELD(pattern, str1[,str2,...]) | Renvoie la position d'index de la chaîne ou du nombre correspondant au modèle donné. |
FIND_IN_SET() | FIND_IN_SET(pattern, strlist) | Renvoie la position d'index où le motif donné apparaît dans une liste de chaînes. |
Les deux fonctions acceptent un pattern
comme premier argument. Cependant, c'est ce qui vient ensuite qui met en évidence leurs différences :
FIELD()
accepte une ou plusieurs chaînes, séparées par une virgule.FIND_IN_SET()
accepte une seule liste de chaînes.
Exemple
Voici un exemple qui illustre la différence entre ces deux fonctions :
SELECT
FIELD('bat', 'cat','dog','bat') AS "FIELD()",
FIND_IN_SET('bat', 'cat,dog,bat') AS "FIND_IN_SET()";
Résultat :
+---------+---------------+ | FIELD() | FIND_IN_SET() | +---------+---------------+ | 3 | 3 | +---------+---------------+
Chaque fonction a renvoyé le même résultat, mais chaque fonction a accepté les chaînes dans un format différent.
Les valeurs fournies à FIELD()
sont venus sous la forme de trois arguments distincts, alors que les valeurs fournies à FIND_IN_SET()
est venu comme une seule liste de chaînes (qui contenait les valeurs séparées).