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.