In MariaDB LOCATE()
ist eine eingebaute String-Funktion, die die Position des ersten Vorkommens eines Teilstrings innerhalb eines anderen Strings zurückgibt.
LOCATE()
ähnelt dem INSTR()
Funktion, außer dass LOCATE()
bietet die Möglichkeit, eine Startposition für die Suche anzugeben. Außerdem wird die Argumentreihenfolge zwischen diesen beiden Funktionen umgekehrt.
Syntax
Das LOCATE()
-Funktion unterstützt eine Zwei-Argument-Syntax und eine Drei-Argument-Syntax.
Syntax mit zwei Argumenten:
LOCATE(substr,str)
Syntax mit drei Argumenten:
LOCATE(substr,str,pos)
Wobei str
ist die Zeichenfolge, substr
der zu suchende Teilstring ist und pos
ist die Position, um die Suche zu starten.
Beispiel
Hier ist ein einfaches Beispiel:
SELECT LOCATE('hot', 'The hot sun');
Ergebnis:
+------------------------------+| LOCATE('hot', 'The hot sun') |+------------------------------+| 5 |+------------------------------+
Startposition
Hier ist ein Beispiel für die Angabe einer Startposition für die Suche:
SELECT LOCATE('hot', 'The hot sun is really hot', 8);
Ergebnis:
Groß-/Kleinschreibung
LOCATE()
führt eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durch:
SELECT LOCATE('HOT', 'The hot sun');
Ergebnis:
+------------------------------+| LOCATE('HOT', 'Die heiße Sonne') |+------------------------------+| 5 |+------------------------------+
Mehrere Vorkommen
Wenn der Teilstring mehr als einmal vorkommt, wird nur die Position des ersten (von der Startposition) zurückgegeben:
SELECT LOCATE('hot', 'The hot sun is really hot');
Ergebnis:
+--------------------------------------------------+| LOCATE('hot', 'Die heiße Sonne ist wirklich heiß') |+---------------------------------------------- -----------+| 5 |+----------------------------------------------------+
Hier ist es mit einer Startposition:
SELECT LOCATE('hot', 'The hot sun is really hot', 20);
Ergebnis:
Teilweise Übereinstimmung
Wenn die Teilzeichenfolge Teil eines größeren Worts ist, ist es immer noch eine Übereinstimmung:
SELECT LOCATE('hot', 'The hottest sun');
Ergebnis:
+----------------------------------------------+| LOCATE('hot', 'Die heißeste Sonne') |+------------------------------------------------+| 5 |+-----------------------------------------------+
Aber wenn der String nur ein Teil des Teilstrings ist, ist es keine Übereinstimmung:
SELECT LOCATE('hottest', 'The hot sun');
Ergebnis:
+----------------------------------------------+| LOCATE('heißeste', 'Die heiße Sonne') |+------------------------------------------------+| 0 |+---------------------------------------------+
Leerzeichen
Das Leerzeichen ist immer noch ein String, also können wir Leerzeichen in den Teilstring einfügen, auch wenn es das einzige Zeichen ist:
SELECT LOCATE(' ', 'The hot sun');
Ergebnis:
+-----------------------------------+| LOCATE(' ', 'Die heiße Sonne') |+-----------------------------------+| 4 |+------------------------------------+
Leerer String
Folgendes passiert, wenn der Teilstring ein leerer String ist:
SELECT LOCATE('', 'The hot sun');
Ergebnis:
+-----------------------------------+| LOCATE('', 'Die heiße Sonne') |+-----------------------------------+| 1 |+-----------------------------------+
Keine Übereinstimmung
Wenn der Teilstring nicht im String gefunden wird, LOCATE()
gibt 0
zurück :
SELECT LOCATE('cold', 'The hot sun');
Ergebnis:
+-------------------------------+| LOCATE('cold', 'the hot sun') |+------------------------------+| 0 |+-------------------------------+
Null-Argumente
Bereitstellung von null
für jedes der Argumente ergibt sich null
:
SELECT
LOCATE(null, 'The hot sun'),
LOCATE('hot', null);
Ergebnis:
+-------------------------------------+---------------- -----+| LOCATE(null, 'Die heiße Sonne') | LOCATE('heiß', null) |+------------------------------------+---------- -----------+| NULL | NULL |+-------------------------------------+---------------- ----+
Angabe der falschen Anzahl von Argumenten
Aufruf von LOCATE()
mit der falschen Anzahl von Argumenten oder ohne Übergabe von Argumenten führt zu einem Fehler:
SELECT LOCATE('hot');
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion 'LOCATE'