MariaDB má INSTR()
funkce a také LOCATE()
funkce. Zdá se, že obě funkce dělají přesně to samé – vracejí pozici podřetězce v řetězci.
Je tu však rozdíl.
Rozdíly
Rozdíl mezi těmito dvěma funkcemi můžeme vidět při pohledu na jejich syntaxi a také na několika příkladech.
Syntaxe
Syntaxe pro INSTR()
:
INSTR(str,substr)
Dvě akceptované syntaxe pro LOCATE()
:
LOCATE(substr,str)
LOCATE(substr,str,pos)
Kde str
je řetězec, substr
je podřetězec, který se má najít, a pos
je pozice pro zahájení vyhledávání.
Rozdíl mezi těmito dvěma funkcemi lze shrnout následovně:
- Položka
LOCATE()
funkce přijímá stejné dva argumenty jakoINSTR()
přijímá, ale v obráceném pořadí.
- Položka
LOCATE()
funkce přijímá volitelný třetí argument k určení počáteční pozice pro vyhledávání.INSTR()
funkce takový argument nepřijímá.
Takže LOCATE()
poskytuje další funkce, které INSTR()
neposkytuje.
Příklad 1 – První rozdíl
Zde je příklad, který ukazuje obrácené pořadí, ve kterém dvě funkce přijímají své argumenty:
SELECT
INSTR('Disconnect', 'con'),
LOCATE('con', 'Disconnect');
Výsledek:
+----------------------------+-----------------------------+ | INSTR('Disconnect', 'con') | LOCATE('con', 'Disconnect') | +----------------------------+-----------------------------+ | 4 | 4 | +----------------------------+-----------------------------+
Příklad 2 – Druhý rozdíl
Zde je příklad, který ukazuje další funkce, které LOCATE()
poskytuje přes INSTR()
:
SELECT
INSTR('My cat is a good cat', 'cat') AS "INSTR()",
LOCATE('cat', 'My cat is a good cat') AS "LOCATE()",
LOCATE('cat', 'My cat is a good cat', 10) AS "LOCATE() with 3rd Argument";
Výsledek:
+---------+----------+----------------------------+ | INSTR() | LOCATE() | LOCATE() with 3rd Argument | +---------+----------+----------------------------+ | 4 | 4 | 18 | +---------+----------+----------------------------+
Tento příklad zdůrazňuje skutečnost, že LOCATE()
Funkce nám poskytuje volitelný třetí argument. Tento argument nám umožňuje určit počáteční pozici pro vyhledávání, což znamená, že nejsme omezeni pouze na první výskyt v celém řetězci.