MariaDB har en INSTR()
funktion og også en LOCATE()
fungere. Begge funktioner ser ud til at gøre nøjagtig det samme – returner positionen af en understreng i en streng.
Der er dog en forskel.
Forskellene
Vi kan se forskellen mellem disse to funktioner ved at se på deres syntaks samt et par eksempler.
Syntaks
Syntaksen for INSTR()
:
INSTR(str,substr)
De to accepterede syntakser for LOCATE()
:
LOCATE(substr,str)
LOCATE(substr,str,pos)
Hvor str
er strengen, substr
er den understreng, der skal findes, og pos
er positionen til at starte søgningen.
Forskellen mellem de to funktioner kan opsummeres som følger:
LOCATE()
funktion accepterer de samme to argumenter somINSTR()
accepterer, men i omvendt rækkefølge.
LOCATE()
funktion accepterer et valgfrit tredje argument for at angive startpositionen for søgningen.INSTR()
funktion accepterer ikke et sådant argument.
Så LOCATE()
giver ekstra funktionalitet som INSTR()
giver ikke.
Eksempel 1 – Den første forskel
Her er et eksempel, der viser den omvendte rækkefølge, hvori de to funktioner accepterer deres argumenter:
SELECT
INSTR('Disconnect', 'con'),
LOCATE('con', 'Disconnect');
Resultat:
+----------------------------+-----------------------------+ | INSTR('Disconnect', 'con') | LOCATE('con', 'Disconnect') | +----------------------------+-----------------------------+ | 4 | 4 | +----------------------------+-----------------------------+
Eksempel 2 – Den anden forskel
Her er et eksempel, der viser den ekstra funktionalitet, som LOCATE()
giver over 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 | +---------+----------+----------------------------+
Dette eksempel fremhæver det faktum, at LOCATE()
funktion giver os et valgfrit tredje argument. Dette argument giver os mulighed for at angive en startposition for søgningen, hvilket betyder, at vi ikke er begrænset til kun den første forekomst i hele strengen.