I MariaDB, LOCATE()
är en inbyggd strängfunktion som returnerar positionen för den första förekomsten av en delsträng i en annan sträng.
LOCATE()
liknar INSTR()
funktion, förutom att LOCATE()
ger möjlighet att ange en startposition för sökningen. Argumentordningen är också omvänd mellan dessa två funktioner.
Syntax
LOCATE()
Funktionen stöder en syntax med två argument och en syntax med tre argument.
Syntax med två argument:
LOCATE(substr,str)
Syntax med tre argument:
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.
Exempel
Här är ett grundläggande exempel:
SELECT LOCATE('hot', 'The hot sun');
Resultat:
+-------------------------------------+| LOCATE('het', 'Den heta solen') |+------------------------------------+| 5 |+-------------------------------------+
Startposition
Här är ett exempel på att ange en startposition för sökningen:
SELECT LOCATE('hot', 'The hot sun is really hot', 8);
Resultat:
+------------------------------------------------------ --+| LOCATE('hot', 'Den heta solen är riktigt varm', 8) |+-------------------------------------- ------------------+| 23 |+------------------------------------------------------ -+
Skaftkänslighet
LOCATE()
utför en skiftlägesokänslig sökning:
SELECT LOCATE('HOT', 'The hot sun');
Resultat:
+-------------------------------------+| LOCATE('HOT', 'Den heta solen') |+------------------------------------+| 5 |+-------------------------------------+
Flera förekomster
Om delsträngen förekommer mer än en gång, returneras endast positionen för den första (från startpositionen):
SELECT LOCATE('hot', 'The hot sun is really hot');
Resultat:
+----------------------------------------------------+| LOCATE('het', 'Den heta solen är riktigt varm') |+---------------------------------------- -----------+| 5 |+----------------------------------------------------+Här är den med ett utgångsläge:
SELECT LOCATE('hot', 'The hot sun is really hot', 20);
Resultat:
+------------------------------------------------------ --+| LOCATE('het', 'Den heta solen är riktigt varm', 20) |+------------------------------------------- ------------------+| 23 |+------------------------------------------------------ -+Delvis matchning
Om delsträngen är en del av ett större ord, är det fortfarande en matchning:
SELECT LOCATE('hot', 'The hottest sun');
Resultat:
+------------------------------------------+| LOCATE('het', 'Den hetaste solen') |+----------------------------------------+| 5 |+----------------------------------------+Men om strängen bara är en del av understrängen är den inte en matchning:
SELECT LOCATE('hottest', 'The hot sun');
Resultat:
+------------------------------------------+| LOCATE('hetaste', 'Den heta solen') |+----------------------------------------+| 0 |+------------------------------------------+Spaces
Mellanslagstecknet är fortfarande en sträng, så vi kan inkludera mellanslag i understrängen, även om det är det enda tecknet:
SELECT LOCATE(' ', 'The hot sun');
Resultat:
+------------------------------------+| LOCATE(' ', 'Den heta solen') |+----------------------------------+| 4 |+------------------------------------+Töm sträng
Så här händer när delsträngen är en tom sträng:
SELECT LOCATE('', 'The hot sun');
Resultat:
+--------------------------------+| LOCATE('', 'Den heta solen') |+--------------------------------+| 1 |+-----------------------------------+Ingen match
Om delsträngen inte hittas i strängen,
LOCATE()
returnerar0
:SELECT LOCATE('cold', 'The hot sun');
Resultat:
+--------------------------------------+| LOCATE('kallt', 'Den heta solen') |+-------------------------------------+| 0 |+--------------------------------------+Nollargument
Tillhandahåller
null
för något av argumenten resulterar inull
:SELECT LOCATE(null, 'The hot sun'), LOCATE('hot', null);
Resultat:
+------------------------------------+---------------- -----+| LOCATE(null, 'Den heta solen') | LOCATE('hot', null) |+------------------------------------+---------------- -----------+| NULL | NULL |+-------------------------------------+---------------- ----+Ange fel antal argument
Anropar
LOCATE()
med fel antal argument, eller utan att skicka några argument resulterar i ett fel:SELECT LOCATE('hot');
Resultat:
ERROR 1582 (42000):Fel parameterantal i anropet till den ursprungliga funktionen 'LOCATE'