Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

INSTR() Equivalente in SQL Server

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.