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.