V MySQL můžete použít FIND_IN_SET()
funkce, která vrátí index dané položky seznamu v seznamu řetězců (například „položka1, položka2, položka3,…“).
Funkce má dva argumenty; řetězec, který se má najít, a seznam, který se má hledat.
Syntaxe vypadá takto:
FIND_IN_SET(str,strlist)
Kde str
je řetězec, který hledáte, a strlist
je seznam řetězců k prohledávání.
Příklad
Zde je příklad:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | 2 | +--------+
To vrátí 2
protože to je pozice řetězce Dog
v seznamu řetězců.
Všimněte si, že je vrácen pouze index prvního výskytu. Pokud tedy došlo k dalšímu výskytu Dog
po tomto prvním bychom stále dostali stejný výsledek:
SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | 2 | +--------+
Žádné shody
Když řetězec není nalezen, výsledek 0
je vráceno:
SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
Co když první argument obsahuje čárku?
Funkce nevrátí kladný výsledek, pokud první argument obsahuje čárku.
Zde je příklad:
SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';
Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
V tomto příkladu by se dalo očekávat, že vrátí kladný výsledek (s ohledem na Cat,Dog
je ve skutečnosti v seznamu), čárka se však v seznamu používá jako oddělovač, a proto shoda řetězců nefunguje.
Viz také Jak vrátit pozici argumentu v seznamu argumentů pomocí FIELD()
funkce.