I MariaDB, LOCATE()
er en indbygget strengfunktion, der returnerer positionen for den første forekomst af en understreng i en anden streng.
LOCATE()
ligner INSTR()
funktion, bortset fra at LOCATE()
giver mulighed for at angive en startposition for søgningen. Argumentrækkefølgen er også omvendt mellem disse to funktioner.
Syntaks
LOCATE()
funktion understøtter en to-argument-syntaks og en tre-argument-syntaks.
To argument syntaks:
LOCATE(substr,str)
Syntaks med tre argumenter:
LOCATE(substr,str,pos)
Hvor str
er strengen, substr
er den understreng, der skal findes, og pos
er positionen til at starte søgningen.
Eksempel
Her er et grundlæggende eksempel:
SELECT LOCATE('hot', 'The hot sun');
Resultat:
+--------------------------------------+| LOCATE('hot', 'Den varme sol') |+------------------------------------+| 5 |+-------------------------------------+
Startposition
Her er et eksempel på at angive en startposition for søgningen:
SELECT LOCATE('hot', 'The hot sun is really hot', 8);
Resultat:
+---------------------------------------------- --+| LOCATE('hot', 'Den varme sol er virkelig varm', 8) |+-------------------------------------- ------------------+| 23 |+------------------------------------------------------ -+
Skrivar og bogstaver
LOCATE()
udfører en søgning uden store og små bogstaver:
SELECT LOCATE('HOT', 'The hot sun');
Resultat:
+--------------------------------------+| LOCATE('HOT', 'Den varme sol') |+------------------------------------+| 5 |+-------------------------------------+
Flere forekomster
Hvis understrengen forekommer mere end én gang, returneres kun positionen for den første (fra startpositionen):
SELECT LOCATE('hot', 'The hot sun is really hot');
Resultat:
+----------------------------------------------------+| LOCATE('hot', 'Den varme sol er virkelig varm') |+---------------------------------------- -----------+| 5 |+----------------------------------------------------+Her er den med en startposition:
SELECT LOCATE('hot', 'The hot sun is really hot', 20);
Resultat:
+---------------------------------------------- --+| LOCATE('hot', 'Den varme sol er virkelig varm', 20) |+------------------------------------- ------------------+| 23 |+------------------------------------------------------ -+Delvis match
Hvis understrengen er en del af et større ord, er det stadig et match:
SELECT LOCATE('hot', 'The hottest sun');
Resultat:
+----------------------------------------+| LOCATE('hot', 'Den varmeste sol') |+----------------------------------------+| 5 |+------------------------------------------+Men hvis strengen kun er en del af understrengen, er den ikke et match:
SELECT LOCATE('hottest', 'The hot sun');
Resultat:
+----------------------------------------+| LOCATE('hottest', 'Den varme sol') |+----------------------------------------+| 0 |+----------------------------------------+Mellemrum
Mellemrumstegnet er stadig en streng, så vi kan inkludere mellemrum i understrengen, selvom det er det eneste tegn:
SELECT LOCATE(' ', 'The hot sun');
Resultat:
+------------------------------------+| LOCATE(' ', 'Den varme sol') |+----------------------------------+| 4 |+------------------------------------+Tøm streng
Her er, hvad der sker, når understrengen er en tom streng:
SELECT LOCATE('', 'The hot sun');
Resultat:
+--------------------------------+| LOCATE('', 'Den varme sol') |+--------------------------------+| 1 |+-----------------------------------+Ingen match
Hvis understrengen ikke findes i strengen,
LOCATE()
returnerer0
:SELECT LOCATE('cold', 'The hot sun');
Resultat:
+---------------------------------------+| LOCATE('kold', 'Den varme sol') |+------------------------------------+| 0 |+--------------------------------------+Nul-argumenter
Giver
null
for ethvert af argumenterne resulterer inull
:SELECT LOCATE(null, 'The hot sun'), LOCATE('hot', null);
Resultat:
+-------------------------------------+---------------- -----+| LOCATE(null, 'Den varme sol') | LOCATE('hot', null) |+------------------------------------+---------------- -----------+| NULL | NULL |+-------------------------------+---------------- ----+Angivelse af det forkerte antal argumenter
Kalder
LOCATE()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:SELECT LOCATE('hot');
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'LOCATE'