Molti RDBMS hanno un INSTR()
funzione che ci permette di trovare una sottostringa all'interno di una stringa. Alcuni (come MySQL e MariaDB) hanno anche un LOCATE()
funzione e un POSITION()
funzione (supportata anche da PostgreSQL), che fa una cosa simile.
SQL Server non ha un INSTR()
funzione. Né ha un LOCATE()
o POSITION()
funzione. Ma ha il CHARINDEX()
funzione che fa la stessa cosa.
SQL Server dispone anche di PATINDEX()
funzione, che svolge un lavoro simile a CHARINDEX()
.
Il CHARINDEX()
Funzione
Ecco un esempio di CHARINDEX()
funzione:
SELECT CHARINDEX('news', 'No news is good news');
Risultato:
4
La funzione accetta un terzo argomento che ci permette di specificare da dove iniziare la ricerca:
SELECT CHARINDEX('news', 'No news is good news', 5);
Risultato:
17
In questo esempio, abbiamo iniziato la ricerca dalla posizione 5, che era dopo l'inizio della prima occorrenza di news
, quindi ha restituito la posizione della seconda occorrenza.
Il PATINDEX()
Funzione
Il PATINDEX()
la funzione è simile a CHARINDEX()
, tranne per il fatto che ci consente di cercare un modello, anziché una stringa specifica.
Ecco un esempio per illustrare cosa intendo:
SELECT PATINDEX('%ew%', 'No news is good news');
Risultato:
5
Ecco cosa succede se rimuovo i caratteri jolly:
SELECT PATINDEX('ew', 'No news is good news');
Risultato:
0
Vedi PATINDEX()
rispetto a CHARINDEX()
per ulteriori informazioni sulle differenze tra queste due funzioni.