V MySQL je to LOCATE()
Funkce vrací pozici podřetězce v řetězci. Přesněji řečeno, vrací pozici prvního výskytu v řetězci nebo prvního výskytu za daným počátečním bodem.
Syntaxe
Lze jej použít jedním z následujících způsobů:
LOCATE(substr,str) LOCATE(substr,str,pos)
Kde substr
je podřetězec, který se má vyhledat, a str
je řetězec, který se má hledat.
Při použití druhé syntaxe pos
je pozice pro zahájení vyhledávání.
Příklad 1 – První syntaxe
Zde je příklad použití první syntaxe:
SELECT LOCATE('cat', 'One cat jumped over the other cat') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 5 | +--------+
Příklad 2 – Druhá syntaxe
Zde je příklad, kdy určíme počáteční pozici pro zahájení vyhledávání:
SELECT LOCATE('cat', 'One cat jumped over the other cat', 6) AS Result;
Výsledek:
+--------+ | Result | +--------+ | 31 | +--------+
V tomto případě první výskyt cat
začíná na pozici 5, ale zadal jsem vyhledávání tak, aby začínalo na pozici 6. Pozice dalšího výskytu tohoto řetězce byla tedy ta, která byla vrácena.
Všimněte si, že ačkoli vyhledávání začalo na pozici 6, funkce stále vrací pozici podřetězce v řetězci – nikoli z počáteční pozice.
Zde je další příklad, který vám to pomůže objasnit.
SELECT LOCATE('c', 'a b c', 1) AS 'Result 1', LOCATE('c', 'a b c', 2) AS 'Result 2', LOCATE('c', 'a b c', 4) AS 'Result 3';
Výsledek:
+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | +----------+----------+----------+ | 5 | 5 | 5 | +----------+----------+----------+
Výsledek je stejný bez ohledu na to, kde začneme hledat.
Příklad 3 – Vyhledání části slova
Podřetězec může být součástí delšího slova:
SELECT LOCATE('sing', 'Increasingly') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 7 | +--------+
Ve skutečnosti neexistuje žádný požadavek, aby to bylo slovo (koneckonců, jednoduše hledáme řetězec):
SELECT LOCATE('z23!#', 'u_4, z23!#') AS 'Result 1', LOCATE(' ', 'a b c') AS 'Result 2', LOCATE(',', 'cat, dog, bird') AS 'Result 3';
Výsledek:
+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | +----------+----------+----------+ | 6 | 2 | 4 | +----------+----------+----------+
Příklad 4 – Žádné shody
Pokud podřetězec není nalezen, 0 je vráceno:
SELECT LOCATE('Bat', 'Increasingly') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
Příklad 5 – Rozlišování malých a velkých písmen
Tato funkce je bezpečná pro více bajtů a rozlišuje malá a velká písmena pouze v případě, že alespoň jeden argument je binární řetězec.
Proto následující funguje na nebinárních řetězcích, i když se velikost písmen neshoduje:
SELECT LOCATE('Sing', 'Increasingly') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 7 | +--------+
Pokud ale použijeme binární řetězec, stane se toto:
SET @str = BINARY 'Increasingly'; SELECT LOCATE('Sing', @str) AS Result;
Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
Ale samozřejmě, když to změníme tak, aby se velká a malá písmena shodovala, dostaneme shodu:
SET @str = BINARY 'Increasingly'; SELECT LOCATE('sing', @str) AS Result;
Výsledek:
+--------+ | Result | +--------+ | 7 | +--------+
Příklad 6 – Argumenty NULL
Pokud je některý z argumentů NULL
,
NULL
je vráceno:
SELECT LOCATE(NULL, 'Increasingly') a, LOCATE('Bat', NULL) b, LOCATE('Bat', 'Increasingly', NULL) c;
Výsledek:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+