Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Funktionsweise der LOCATE()-Funktion in MySQL

In MySQL das LOCATE() Die Funktion gibt die Position eines Teilstrings innerhalb eines Strings zurück. Genauer gesagt gibt es die Position des ersten Vorkommens innerhalb der Zeichenfolge oder das erste Vorkommen nach einem bestimmten Startpunkt zurück.

Syntax

Es kann auf eine der folgenden Arten verwendet werden:

LOCATE(substr,str)
LOCATE(substr,str,pos)

Wobei substr der zu suchende Teilstring ist und str ist die Zeichenfolge, nach der gesucht werden soll.

Bei Verwendung der zweiten Syntax ist pos ist die Position, um mit der Suche zu beginnen.

Beispiel 1 – Erste Syntax

Hier ist ein Beispiel mit der ersten Syntax:

SELECT LOCATE('cat', 'One cat jumped over the other cat') AS Result;

Ergebnis:

+--------+
| Result |
+--------+
|      5 |
+--------+

Beispiel 2 – Zweite Syntax

Hier ist ein Beispiel, in dem wir eine Startposition angeben, um mit der Suche zu beginnen:

SELECT LOCATE('cat', 'One cat jumped over the other cat', 6) AS Result;

Ergebnis:

+--------+
| Result |
+--------+
|     31 |
+--------+

In diesem Fall das erste Vorkommen von cat beginnt an Position 5, aber ich habe angegeben, dass die Suche an Position 6 beginnen soll. Daher war die Position des nächsten Vorkommens dieser Zeichenfolge diejenige, die zurückgegeben wurde.

Beachten Sie, dass die Funktion, obwohl die Suche an Position 6 begonnen hat, immer noch die Position des Teilstrings innerhalb des Strings zurückgibt – nicht von der Startposition.

Hier ist ein weiteres Beispiel, um dies klarer zu machen.

SELECT 
  LOCATE('c', 'a b c', 1) AS 'Result 1',
  LOCATE('c', 'a b c', 2) AS 'Result 2',
  LOCATE('c', 'a b c', 4) AS 'Result 3';

Ergebnis:

+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        5 |        5 |        5 |
+----------+----------+----------+

Das Ergebnis ist das gleiche, egal wo wir mit der Suche beginnen.

Beispiel 3 – Finden eines Teils eines Wortes

Der Teilstring kann Teil eines längeren Wortes sein:

SELECT LOCATE('sing', 'Increasingly') AS Result;

Ergebnis:

+--------+
| Result |
+--------+
|      7 |
+--------+

Tatsächlich muss es nicht einmal ein Wort sein (schließlich suchen wir einfach eine Zeichenfolge):

SELECT 
  LOCATE('z23!#', 'u_4, z23!#') AS 'Result 1',
  LOCATE(' ', 'a b c') AS 'Result 2',
  LOCATE(',', 'cat, dog, bird') AS 'Result 3';

Ergebnis:

+----------+----------+----------+
| Result 1 | Result 2 | Result 3 |
+----------+----------+----------+
|        6 |        2 |        4 |
+----------+----------+----------+

Beispiel 4 – Keine Übereinstimmungen

Wenn der Teilstring nicht gefunden wird, 0 wird zurückgegeben:

SELECT LOCATE('Bat', 'Increasingly') AS Result;

Ergebnis:

+--------+
| Result |
+--------+
|      0 |
+--------+

Beispiel 5 – Groß- und Kleinschreibung

Diese Funktion ist Multibyte-sicher und unterscheidet nur dann zwischen Groß- und Kleinschreibung, wenn mindestens ein Argument eine binäre Zeichenfolge ist.

Daher funktioniert Folgendes bei nichtbinären Zeichenfolgen, obwohl die Groß-/Kleinschreibung nicht übereinstimmt:

SELECT LOCATE('Sing', 'Increasingly') AS Result;

Ergebnis:

+--------+
| Result |
+--------+
|      7 |
+--------+

Aber wenn wir einen binären String verwenden, passiert das:

SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('Sing', @str) AS Result;

Ergebnis:

+--------+
| Result |
+--------+
|      0 |
+--------+

Aber natürlich, wenn wir es so ändern, dass die Groß-/Kleinschreibung übereinstimmt, erhalten wir eine Übereinstimmung:

SET @str = BINARY 'Increasingly'; 
SELECT LOCATE('sing', @str) AS Result;

Ergebnis:

+--------+
| Result |
+--------+
|      7 |
+--------+

Beispiel 6 – NULL-Argumente

Wenn eines der Argumente NULL ist , NULL wird zurückgegeben:

SELECT 
  LOCATE(NULL, 'Increasingly') a,
  LOCATE('Bat', NULL) b,
  LOCATE('Bat', 'Increasingly', NULL) c;

Ergebnis:

+------+------+------+
| a    | b    | c    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+