In MariaDB, LOCATE() è una funzione di stringa incorporata che restituisce la posizione della prima occorrenza di una sottostringa all'interno di un'altra stringa.
LOCATE() è simile a INSTR() funzione, eccetto che LOCATE() offre la possibilità di specificare una posizione iniziale per la ricerca. Inoltre, l'ordine degli argomenti è invertito tra queste due funzioni.
Sintassi
Il LOCATE() supporta una sintassi a due argomenti e una sintassi a tre argomenti.
Sintassi di due argomenti:
LOCATE(substr,str) Sintassi di tre argomenti:
LOCATE(substr,str,pos)
Dove str è la stringa, substr è la sottostringa da trovare e pos è la posizione da cui iniziare la ricerca.
Esempio
Ecco un esempio di base:
SELECT LOCATE('hot', 'The hot sun'); Risultato:
+------------------------------+
| LOCATE('hot', 'The hot sun') |
+------------------------------+
| 5 |
+------------------------------+ Posizione iniziale
Ecco un esempio di come fornire una posizione di partenza per la ricerca:
SELECT LOCATE('hot', 'The hot sun is really hot', 8); Risultato:
+------------------------------------------------+
| LOCATE('hot', 'The hot sun is really hot', 8) |
+------------------------------------------------+
| 23 |
+------------------------------------------------+ Maiuscole/minuscole
LOCATE() esegue una ricerca senza distinzione tra maiuscole e minuscole:
SELECT LOCATE('HOT', 'The hot sun'); Risultato:
+------------------------------+
| LOCATE('HOT', 'The hot sun') |
+------------------------------+
| 5 |
+------------------------------+ Ricorrenze multiple
Se la sottostringa ricorre più di una volta, viene restituita solo la posizione della prima (dalla posizione iniziale):
SELECT LOCATE('hot', 'The hot sun is really hot'); Risultato:
+--------------------------------------------+
| LOCATE('hot', 'The hot sun is really hot') |
+--------------------------------------------+
| 5 |
+--------------------------------------------+ Eccolo con una posizione di partenza:
SELECT LOCATE('hot', 'The hot sun is really hot', 20); Risultato:
+------------------------------------------------+
| LOCATE('hot', 'The hot sun is really hot', 20) |
+------------------------------------------------+
| 23 |
+------------------------------------------------+ Partita parziale
Se la sottostringa fa parte di una parola più grande, è ancora una corrispondenza:
SELECT LOCATE('hot', 'The hottest sun'); Risultato:
+----------------------------------+
| LOCATE('hot', 'The hottest sun') |
+----------------------------------+
| 5 |
+----------------------------------+ Ma se la stringa è solo una parte della sottostringa, non è una corrispondenza:
SELECT LOCATE('hottest', 'The hot sun'); Risultato:
+----------------------------------+
| LOCATE('hottest', 'The hot sun') |
+----------------------------------+
| 0 |
+----------------------------------+ Spazi
Il carattere spazio è ancora una stringa, quindi possiamo includere spazi nella sottostringa, anche se è l'unico carattere:
SELECT LOCATE(' ', 'The hot sun'); Risultato:
+----------------------------+
| LOCATE(' ', 'The hot sun') |
+----------------------------+
| 4 |
+----------------------------+ Stringa vuota
Ecco cosa succede quando la sottostringa è una stringa vuota:
SELECT LOCATE('', 'The hot sun'); Risultato:
+---------------------------+
| LOCATE('', 'The hot sun') |
+---------------------------+
| 1 |
+---------------------------+ Nessuna corrispondenza
Se la sottostringa non viene trovata nella stringa, LOCATE() restituisce 0 :
SELECT LOCATE('cold', 'The hot sun'); Risultato:
+-------------------------------+
| LOCATE('cold', 'The hot sun') |
+-------------------------------+
| 0 |
+-------------------------------+ Argomenti nulli
Fornendo null per qualsiasi argomento risulta null :
SELECT
LOCATE(null, 'The hot sun'),
LOCATE('hot', null); Risultato:
+-----------------------------+---------------------+
| LOCATE(null, 'The hot sun') | LOCATE('hot', null) |
+-----------------------------+---------------------+
| NULL | NULL |
+-----------------------------+---------------------+ Fornire il numero sbagliato di argomenti
Chiamando LOCATE() con il numero errato di argomenti o senza passare alcun argomento genera un errore:
SELECT LOCATE('hot'); Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOCATE'