In MariaDB, LOCATE()
is een ingebouwde tekenreeksfunctie die de positie van het eerste voorkomen van een subtekenreeks binnen een andere tekenreeks retourneert.
LOCATE()
lijkt op de INSTR()
functie, behalve dat LOCATE()
biedt de mogelijkheid om een startpositie voor de zoekopdracht op te geven. Ook is de argumentvolgorde tussen deze twee functies omgekeerd.
Syntaxis
De LOCATE()
functie ondersteunt een syntaxis met twee argumenten en een syntaxis met drie argumenten.
Syntaxis van twee argumenten:
LOCATE(substr,str)
Syntaxis van drie argumenten:
LOCATE(substr,str,pos)
Waar str
is de string, substr
is de substring die moet worden gevonden, en pos
is de positie om de zoekopdracht te starten.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT LOCATE('hot', 'The hot sun');
Resultaat:
+------------------------------+ | LOCATE('hot', 'The hot sun') | +------------------------------+ | 5 | +------------------------------+
Startpositie
Hier is een voorbeeld van het verstrekken van een startpositie voor de zoekopdracht:
SELECT LOCATE('hot', 'The hot sun is really hot', 8);
Resultaat:
+------------------------------------------------+ | LOCATE('hot', 'The hot sun is really hot', 8) | +------------------------------------------------+ | 23 | +------------------------------------------------+
Hoofdlettergevoeligheid
LOCATE()
voert een hoofdletterongevoelige zoekopdracht uit:
SELECT LOCATE('HOT', 'The hot sun');
Resultaat:
+------------------------------+ | LOCATE('HOT', 'The hot sun') | +------------------------------+ | 5 | +------------------------------+
Meerdere gebeurtenissen
Als de subtekenreeks meer dan één keer voorkomt, wordt alleen de positie van de eerste (vanaf de startpositie) geretourneerd:
SELECT LOCATE('hot', 'The hot sun is really hot');
Resultaat:
+--------------------------------------------+ | LOCATE('hot', 'The hot sun is really hot') | +--------------------------------------------+ | 5 | +--------------------------------------------+
Hier is het met een startpositie:
SELECT LOCATE('hot', 'The hot sun is really hot', 20);
Resultaat:
+------------------------------------------------+ | LOCATE('hot', 'The hot sun is really hot', 20) | +------------------------------------------------+ | 23 | +------------------------------------------------+
Gedeeltelijke overeenkomst
Als de subtekenreeks deel uitmaakt van een groter woord, is het nog steeds een overeenkomst:
SELECT LOCATE('hot', 'The hottest sun');
Resultaat:
+----------------------------------+ | LOCATE('hot', 'The hottest sun') | +----------------------------------+ | 5 | +----------------------------------+
Maar als de string slechts een deel van de substring is, is het geen overeenkomst:
SELECT LOCATE('hottest', 'The hot sun');
Resultaat:
+----------------------------------+ | LOCATE('hottest', 'The hot sun') | +----------------------------------+ | 0 | +----------------------------------+
Spaties
Het spatieteken is nog steeds een tekenreeks, dus we kunnen spaties in de subtekenreeks opnemen, zelfs als dit het enige teken is:
SELECT LOCATE(' ', 'The hot sun');
Resultaat:
+----------------------------+ | LOCATE(' ', 'The hot sun') | +----------------------------+ | 4 | +----------------------------+
Lege string
Dit is wat er gebeurt als de subtekenreeks een lege tekenreeks is:
SELECT LOCATE('', 'The hot sun');
Resultaat:
+---------------------------+ | LOCATE('', 'The hot sun') | +---------------------------+ | 1 | +---------------------------+
Geen overeenkomst
Als de subtekenreeks niet in de tekenreeks wordt gevonden, LOCATE()
retourneert 0
:
SELECT LOCATE('cold', 'The hot sun');
Resultaat:
+-------------------------------+ | LOCATE('cold', 'The hot sun') | +-------------------------------+ | 0 | +-------------------------------+
Nullargumenten
null
opgeven voor elk van de argumenten resulteert in null
:
SELECT
LOCATE(null, 'The hot sun'),
LOCATE('hot', null);
Resultaat:
+-----------------------------+---------------------+ | LOCATE(null, 'The hot sun') | LOCATE('hot', null) | +-----------------------------+---------------------+ | NULL | NULL | +-----------------------------+---------------------+
Het verkeerde aantal argumenten opgeven
LOCATE()
. aanroepen met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:
SELECT LOCATE('hot');
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOCATE'