In MySQL kunt u de FIND_IN_SET()
. gebruiken functie om de index van een gegeven lijstitem binnen een stringlijst te retourneren (bijvoorbeeld 'item1, item2, item3,...').
De functie heeft twee argumenten; de string om te zoeken, en de lijst om te zoeken.
De syntaxis gaat als volgt:
FIND_IN_SET(str,strlist)
Waar str
is de string die je zoekt, en strlist
is de lijst met tekenreeksen om door te zoeken.
Voorbeeld
Hier is een voorbeeld:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';
Resultaat:
+--------+ | Result | +--------+ | 2 | +--------+
Dit retourneert 2
want dat is de positie van de string Dog
binnen de tekenreekslijst.
Merk op dat alleen de index van het eerste exemplaar wordt geretourneerd. Dus als Dog
nog een keer voorkomt, na die eerste zouden we nog steeds hetzelfde resultaat krijgen:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';
Resultaat:
+--------+ | Result | +--------+ | 2 | +--------+
Geen overeenkomsten
Als de tekenreeks niet wordt gevonden, een resultaat van 0
wordt geretourneerd:
SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';
Resultaat:
+--------+ | Result | +--------+ | 0 | +--------+
Wat als het eerste argument een komma bevat?
De functie geeft geen positief resultaat als het eerste argument een komma bevat.
Hier is een voorbeeld:
SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';
Resultaat:
+--------+ | Result | +--------+ | 0 | +--------+
In dit voorbeeld zou je kunnen verwachten dat het een positief resultaat oplevert (gezien Cat,Dog
staat in de lijst), maar de komma wordt gebruikt als scheidingsteken in de lijst en daarom werkt de tekenreeksovereenkomst niet.
Zie ook Hoe u de positie van een argument binnen een lijst met argumenten kunt retourneren met behulp van het FIELD()
functie.