Mysql
 sql >> Database >  >> RDS >> Mysql

Come funziona la funzione LOCATE() in MySQL

In MySQL, il LOCATE() La funzione restituisce la posizione di una sottostringa all'interno di una stringa. Più specificamente, restituisce la posizione della prima occorrenza all'interno della stringa, o la prima occorrenza dopo un determinato punto di partenza.

Sintassi

Può essere utilizzato in uno dei seguenti modi:

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

Dove substr è la sottostringa da individuare e str è la stringa da cercare.

Quando si utilizza la seconda sintassi, pos è la posizione da cui iniziare la ricerca.

Esempio 1 – Prima sintassi

Ecco un esempio usando la prima sintassi:

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

Risultato:

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

Esempio 2 – Seconda sintassi

Ecco un esempio in cui specifichiamo una posizione iniziale per iniziare la ricerca:

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

Risultato:

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

In questo caso, la prima occorrenza di cat inizia dalla posizione 5, ma ho specificato che la ricerca inizia dalla posizione 6. Pertanto, la posizione dell'occorrenza successiva di quella stringa era quella che è stata restituita.

Si noti che, sebbene la ricerca sia iniziata alla posizione 6, la funzione restituisce comunque la posizione della sottostringa all'interno della stringa, non dalla posizione iniziale.

Ecco un altro esempio per renderlo più chiaro.

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';

Risultato:

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

Il risultato è lo stesso, indipendentemente da dove iniziamo la ricerca.

Esempio 3 – Individuazione di parte di una parola

La sottostringa può far parte di una parola più lunga:

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

Risultato:

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

In effetti, non è necessario che sia nemmeno una parola (dopotutto, stiamo semplicemente cercando una stringa):

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

Risultato:

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

Esempio 4 – Nessuna corrispondenza

Se la sottostringa non viene trovata, 0 viene restituito:

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

Risultato:

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

Esempio 5:distinzione tra maiuscole e minuscole

Questa funzione è multibyte sicura e distingue tra maiuscole e minuscole solo se almeno un argomento è una stringa binaria.

Pertanto, quanto segue funziona su stringhe non binarie, anche se il caso non corrisponde:

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

Risultato:

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

Ma se utilizziamo una stringa binaria, questo accade:

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

Risultato:

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

Ma ovviamente, se lo cambiamo in modo che il caso corrisponda, otteniamo una corrispondenza:

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

Risultato:

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

Esempio 6 – Argomenti NULL

Se uno qualsiasi degli argomenti è NULL , NULL viene restituito:

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

Risultato:

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