MySQL má řadu řetězcových funkcí, které vracejí pozici podřetězce v řetězci. Přesněji řečeno, vrátí pozici prvního výskytu v řetězci (nebo prvního výskytu za daným počátečním bodem).
Funkce, na které odkazuji, jsou následující:
INSTR()
LOCATE()
POSITION()
Níže je uveden přehled každého z nich.
INSTR()
INSTR()
funkce vrací první výskyt podřetězce v řetězci.
Zde je syntaxe:
INSTR(str,substr)
Kde str
je řetězec, který chcete hledat, a substr
je podřetězec, který hledáte.
Příklad
SELECT INSTR('Cats and dogs like to run', 'dogs') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 10 | +--------+
V tomto případě řetězec dogs
začíná na pozici 10.
Pokud podřetězec není nalezen, výsledek 0
je vráceno:
SELECT INSTR('Cats and dogs like to run', 'rabbit') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
LOCATE()
LOCATE()
funkce funguje podobně, až na pár rozdílů; argumenty jsou v jiném pořadí a můžete zadat volitelný třetí parametr označující, kde začít hledat.
Proto jej můžete použít jedním z následujících způsobů:
LOCATE(substr,str) LOCATE(substr,str,pos)
První syntaxe je stejná jako INTSR()
syntaxe kromě str
a substr
jsou vyměněny.
Druhá syntaxe přidává volitelný pos
argument, který vám umožňuje určit pozici pro zahájení vyhledávání.
Příklad první syntaxe
Zde je příklad použití první syntaxe:
SELECT LOCATE('dogs', 'Cats and dogs like to run') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 10 | +--------+
Příklad druhé syntaxe
Zde je příklad, kdy určíme počáteční pozici pro zahájení vyhledávání:
SELECT LOCATE('cat', 'Cats, cats, and more cats!', 6) AS Result;
Výsledek:
+--------+ | Result | +--------+ | 7 | +--------+
Vidíme, že řetězec cat
lze nalézt na pozici 1, ale zadali jsme 6
jako výchozí pozici. Pozice dalšího výskytu tohoto řetězce byla tedy ta, která byla vrácena.
Stejně jako u INSTR()
funkce, pokud podřetězec není nalezen, 0
je vráceno.
POSITION()
POSITION()
funkce je synonymem pro LOCATE()
, ale s mírně odlišnou syntaxí.
Zde je syntaxe:
POSITION(substr IN str)
Toto je synonymum pro následující:
LOCATE(substr,str)
Jeden z předchozích příkladů bychom tedy mohli přepsat takto:
SELECT POSITION('dogs' IN 'Cats and dogs like to run') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 10 | +--------+