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

2 modi per selezionare le righe che corrispondono a tutti gli elementi in un elenco (T-SQL)

Questo articolo presenta due modi per selezionare le righe in base a un elenco di ID (o altri valori) in SQL ServerSQL Server. Questo può essere utile negli scenari in cui si dispone di un elenco di ID separati da virgole e si desidera interrogare il database per le righe che corrispondono a tali ID.

Supponi di avere il seguente elenco di ID:

1,4,6,8

Quindi ora vuoi interrogare una tabella per i record che hanno uno di questi valori (ad esempio 1, 4, 6 o 8) nella sua colonna ID.

Ecco due modi per farlo.

Opzione 1:l'operatore IN

Un'opzione è usare IN operatore all'interno della query per restituire solo le righe specificate nell'elenco.

SELECT ArtistId, ArtistName
FROM Artists
WHERE ArtistId IN (1,4,6,8);

Risultati:

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Come puoi vedere, i valori in ArtistId la colonna corrisponde a quella della nostra lista.

Opzione 2:la funzione STRING_SPLIT()

A partire da SQL Server 2016, STRING_SPLIT() La funzione può essere utilizzata per dividere un'espressione di carattere utilizzando un separatore specificato. In altre parole, puoi usarlo per dividere un elenco delimitato da virgole.

Ecco un esempio che utilizza gli stessi dati dell'esempio precedente:

SELECT ArtistId, ArtistName
FROM Artists
JOIN STRING_SPLIT('1,4,6,8', ',')
ON value = ArtistId;

Risultato:

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Un vantaggio di  STRING_SPLIT() è che ti consente/(richiede) di specificare cosa viene utilizzato come delimitatore per l'elenco. Questo può essere utile quando l'elenco utilizza un carattere diverso come delimitatore.

Ecco lo stesso esempio, ma per un elenco separato da spazi:

SELECT ArtistId, ArtistName 
FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') 
ON value = ArtistId;

Risultato:

ArtistId  ArtistName               
--------  -------------------------
1         Iron Maiden              
4         Buddy Rich               
6         Jim Reeves               
8         Maroon 5                 

Livello di compatibilità

Nota che STRING_SPLIT() è disponibile solo su database con un livello di compatibilità di 130 o superiore. Puoi modificare il livello di compatibilità di un database con la seguente istruzione:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

O per portarlo al livello di SQL Server 2017:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Dove MyDatabase è il nome del database.

Vedere anche Come verificare il livello di compatibilità di un database in SQL Server.