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 | +--------+