To lignende funktioner i MariaDB er FIELD()
og FIND_IN_SET()
. Ved første øjekast ser disse ud til at gøre det samme, men der er en forskel.
Denne artikel ser på forskellen mellem disse to funktioner.
Syntaks og definitioner
Lad os først se på syntaksen og definitionen af hver funktion:
Funktion | Syntaks | Definition |
---|---|---|
FIELD() | FIELD(pattern, str1[,str2,...]) | Returnerer indekspositionen for strengen eller tallet, der matcher det givne mønster. |
FIND_IN_SET() | FIND_IN_SET(pattern, strlist) | Returnerer indekspositionen, hvor det givne mønster forekommer i en strengliste. |
Begge funktioner accepterer et pattern
som deres første argument. Det er dog det næste, der fremhæver deres forskelle:
FIELD()
accepterer en eller flere strenge, adskilt af et komma.FIND_IN_SET()
accepterer en enkelt strengliste.
Eksempel
Her er et eksempel, der viser forskellen mellem disse to funktioner:
SELECT
FIELD('bat', 'cat','dog','bat') AS "FIELD()",
FIND_IN_SET('bat', 'cat,dog,bat') AS "FIND_IN_SET()";
Resultat:
+---------+---------------+ | FIELD() | FIND_IN_SET() | +---------+---------------+ | 3 | 3 | +---------+---------------+
Hver funktion returnerede det samme resultat, men hver funktion accepterede strengene i et andet format.
Værdierne givet til FIELD()
kom som tre separate argumenter, hvorimod værdierne givet til FIND_IN_SET()
kom som en enkelt strengliste (som indeholdt de separate værdier).