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'