MariaDB har en INSTR()
funktion och även en LOCATE()
fungera. Båda funktionerna verkar göra exakt samma sak – returnera positionen för en delsträng i en sträng.
Det finns dock en skillnad.
Skillnaderna
Vi kan se skillnaden mellan dessa två funktioner genom att titta på deras syntax, samt ett par exempel.
Syntax
Syntaxen för INSTR()
:
INSTR(str,substr)
De två accepterade syntaxerna för LOCATE()
:
LOCATE(substr,str)
LOCATE(substr,str,pos)
Där str
är strängen, substr
är delsträngen att hitta och pos
är platsen för att starta sökningen.
Skillnaden mellan de två funktionerna kan sammanfattas enligt följande:
-
LOCATE()
funktion accepterar samma två argument somINSTR()
accepterar, men i omvänd ordning.
-
LOCATE()
funktion accepterar ett valfritt tredje argument för att ange startpositionen för sökningen.INSTR()
funktion accepterar inte ett sådant argument.
Så LOCATE()
ger extra funktionalitet som INSTR()
ger inte.
Exempel 1 – Den första skillnaden
Här är ett exempel som visar den omvända ordningen i vilken de två funktionerna accepterar sina argument:
SELECT
INSTR('Disconnect', 'con'),
LOCATE('con', 'Disconnect');
Resultat:
+----------------------------+-----------------------------+ | INSTR('Disconnect', 'con') | LOCATE('con', 'Disconnect') | +----------------------------+-----------------------------+ | 4 | 4 | +----------------------------+-----------------------------+
Exempel 2 – Den andra skillnaden
Här är ett exempel som visar den extra funktionaliteten som LOCATE()
tillhandahåller över 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";
Resultat:
+---------+----------+----------------------------+ | INSTR() | LOCATE() | LOCATE() with 3rd Argument | +---------+----------+----------------------------+ | 4 | 4 | 18 | +---------+----------+----------------------------+
Det här exemplet framhäver det faktum att LOCATE()
funktion ger oss ett valfritt tredje argument. Detta argument tillåter oss att ange en startposition för sökningen, vilket innebär att vi inte är begränsade till bara den första förekomsten i hela strängen.