I MySQL kan du använda FIND_IN_SET()
funktion för att returnera indexet för ett givet listobjekt i en stränglista (till exempel 'item1, item2, item3,...').
Funktionen tar två argument; strängen för att hitta och listan för att söka.
Syntaxen ser ut så här:
FIND_IN_SET(str,strlist)
Där str
är strängen du letar efter och strlist
är stränglistan att söka igenom.
Exempel
Här är ett exempel:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 2 | +--------+
Detta returnerar 2
eftersom det är positionen för strängen Dog
i stränglistan.
Observera att endast indexet för den första förekomsten returneras. Så om det fanns en annan förekomst av Dog
efter den första skulle vi fortfarande få samma resultat:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 2 | +--------+
Inga matchningar
När strängen inte hittas, ett resultat av 0
returneras:
SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Vad händer om det första argumentet innehåller ett kommatecken?
Funktionen returnerar inte ett positivt resultat om det första argumentet innehåller ett kommatecken.
Här är ett exempel:
SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
I det här exemplet kan man förvänta sig att det ger ett positivt resultat (med tanke på Cat,Dog
faktiskt finns i listan), men kommatecken används som avgränsare i listan, och därför fungerar inte strängmatchningen.
Se även Hur man returnerar ett arguments position i en lista med argument genom att använda FIELD()
funktion.