Database
 sql >> Base de Dados >  >> RDS >> Database

2 maneiras de selecionar linhas que correspondem a todos os itens em uma lista (T-SQL)


Este artigo apresenta duas maneiras de selecionar linhas com base em uma lista de IDs (ou outros valores) no SQL Server. Isso pode ser útil em cenários em que você tem uma lista de IDs separada por vírgulas e deseja consultar seu banco de dados em busca de linhas que correspondam a essas IDs.

Digamos que você tenha a seguinte lista de IDs:
1,4,6,8

E agora você deseja consultar uma tabela para registros que tenham qualquer um desses valores (ou seja, 1, 4, 6 ou 8) em sua coluna de ID.

Aqui estão duas maneiras de fazer isso.


Opção 1:O Operador IN


Uma opção é usar o IN operador em sua consulta para retornar apenas as linhas especificadas na lista.
SELECT ArtistId, ArtistName
FROM Artists
WHERE ArtistId IN (1,4,6,8);

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

Como você pode ver, os valores no ArtistId coluna correspondem aos da nossa lista.

Opção 2:a função STRING_SPLIT()


A partir do SQL Server 2016, o STRING_SPLIT() A função pode ser usada para dividir uma expressão de caractere usando um separador especificado. Em outras palavras, você pode usá-lo para dividir uma lista delimitada por vírgulas.

Aqui está um exemplo usando os mesmos dados do exemplo anterior:
SELECT ArtistId, ArtistName
FROM Artists
JOIN STRING_SPLIT('1,4,6,8', ',')
ON value = ArtistId;

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

Um benefício de  STRING_SPLIT() é que ele permite/(requer) que você especifique o que está sendo usado como delimitador para a lista. Isso pode ser útil quando sua lista usa um caractere diferente como seu delimitador.

Aqui está o mesmo exemplo, mas para uma lista separada por espaços:
SELECT ArtistId, ArtistName 
FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') 
ON value = ArtistId;

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

Nível de compatibilidade


Observe que STRING_SPLIT() está disponível apenas em bancos de dados com nível de compatibilidade de 130 ou superior. Você pode alterar o nível de compatibilidade de um banco de dados com a seguinte instrução:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

Ou para levá-lo ao nível do SQL Server 2017:
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Onde MyDatabase é o nome do banco de dados.

Consulte também Como verificar o nível de compatibilidade de um banco de dados no SQL Server.