sql >> Databáze >  >> RDS >> Database

2 způsoby, jak vybrat řádky, které odpovídají všem položkám v seznamu (T-SQL)

Tento článek představuje dva způsoby výběru řádků na základě seznamu ID (nebo jiných hodnot) na serveru SQL Server. To může být užitečné v situacích, kdy máte seznam ID oddělených čárkami a chcete v databázi vyhledat řádky, které těmto ID odpovídají.

Řekněme, že máte následující seznam ID:

1,4,6,8

A tak nyní chcete v tabulce dotazovat záznamy, které mají ve sloupci ID některou z těchto hodnot (tj. buď 1, 4, 6 nebo 8).

Zde jsou dva způsoby, jak toho dosáhnout.

Možnost 1:Operátor IN

Jednou z možností je použít IN operátor ve vašem dotazu vrátí pouze ty řádky, které jsou uvedeny v seznamu.

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

Výsledky:

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

Jak můžete vidět, hodnoty v ArtistId sloupec odpovídá těm z našeho seznamu.

Možnost 2:Funkce STRING_SPLIT()

Počínaje SQL Serverem 2016, STRING_SPLIT() funkci lze použít k rozdělení znakového výrazu pomocí zadaného oddělovače. Jinými slovy, můžete jej použít k rozdělení seznamu odděleného čárkami.

Zde je příklad používající stejná data jako v předchozím příkladu:

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

Výsledek:

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

Jedna výhoda  STRING_SPLIT() je, že vám umožňuje/(vyžaduje) určit, co se používá jako oddělovač pro seznam. To může být užitečné, když váš seznam používá jako oddělovač jiný znak.

Zde je stejný příklad, ale pro seznam oddělený mezerami:

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

Výsledek:

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

Úroveň kompatibility

Všimněte si, že STRING_SPLIT() je k dispozici pouze u databází s úrovní kompatibility 130 nebo vyšší. Úroveň kompatibility databáze můžete změnit následujícím příkazem:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

Nebo jej převést na úroveň SQL Server 2017:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Kde MyDatabase je název databáze.

Viz také Jak zkontrolovat úroveň kompatibility databáze na serveru SQL.


  1. Nejlepší nové funkce Oracle 12c

  2. Riziko při používání dynamické paměti v rámci Hyper-V

  3. Jak použít proměnnou pro název databáze v T-SQL?

  4. 11 způsobů, jak získat primární klíč v SQL Server (příklady T-SQL)