sql >> Base de Datos >  >> RDS >> Database

2 formas de seleccionar filas que coincidan con todos los elementos de una lista (T-SQL)

Este artículo presenta dos formas de seleccionar filas en función de una lista de ID (u otros valores) en SQL Server. Esto puede ser útil en escenarios en los que tiene una lista de ID separados por comas y desea consultar su base de datos en busca de filas que coincidan con esos ID.

Digamos que tiene la siguiente lista de identificaciones:

1,4,6,8

Y ahora desea consultar una tabla en busca de registros que tengan cualquiera de esos valores (es decir, 1, 4, 6 u 8) en su columna de ID.

Aquí hay dos formas de hacerlo.

Opción 1:El Operador IN

Una opción es usar el IN dentro de su consulta para devolver solo las filas que se especifican en la 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 puede ver, los valores en el ArtistId columna coinciden con los de nuestra lista.

Opción 2:la función STRING_SPLIT()

A partir de SQL Server 2016, STRING_SPLIT() La función se puede usar para dividir una expresión de caracteres usando un separador especificado. En otras palabras, puede usarlo para dividir una lista delimitada por comas.

Aquí hay un ejemplo usando los mismos datos que en el ejemplo 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                 

Una ventaja de  STRING_SPLIT() es que le permite/(requiere) que especifique qué se está utilizando como delimitador de la lista. Esto puede ser útil cuando su lista usa un carácter diferente como delimitador.

Este es el mismo ejemplo, pero para una lista separada por espacios:

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                 

Nivel de compatibilidad

Tenga en cuenta que STRING_SPLIT() solo está disponible en bases de datos con un nivel de compatibilidad de 130 o superior. Puede cambiar el nivel de compatibilidad de una base de datos con la siguiente declaración:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

O para llevarlo al nivel de SQL Server 2017:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Donde MyDatabase es el nombre de la base de datos.

Consulte también Cómo comprobar el nivel de compatibilidad de una base de datos en SQL Server.