I MySQL kan du bruge FIND_IN_SET()
funktion til at returnere indekset for et givet listeelement inden for en strengliste (for eksempel 'emne1, item2, item3,...').
Funktionen tager to argumenter; strengen for at finde, og listen for at søge.
Syntaksen ser sådan ud:
FIND_IN_SET(str,strlist)
Hvor str
er den streng, du leder efter, og strlist
er strenglisten, der skal søges igennem.
Eksempel
Her er et eksempel:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 2 | +--------+
Dette returnerer 2
fordi det er positionen for strengen Dog
inden for strenglisten.
Bemærk, at kun indekset for den første forekomst returneres. Så hvis der var en anden forekomst af Dog
efter den første vil vi stadig få det samme resultat:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 2 | +--------+
Ingen match
Når strengen ikke findes, er resultatet 0
returneres:
SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Hvad hvis det første argument indeholder et komma?
Funktionen returnerer ikke et positivt resultat, hvis det første argument indeholder et komma.
Her er et eksempel:
SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
I dette eksempel kan man forvente, at det returnerer et positivt resultat (givet Cat,Dog
faktisk er på listen), men kommaet bruges som et skilletegn i listen, og derfor virker strengmatchet ikke.
Se også, hvordan man returnerer et arguments position i en liste over argumenter ved at bruge FIELD()
funktion.