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

2 måder at vælge rækker, der matcher alle elementer på en liste (T-SQL)

Denne artikel præsenterer to måder at vælge rækker på baseret på en liste over id'er (eller andre værdier) i SQL Server. Dette kan være nyttigt i scenarier, hvor du har en kommasepareret liste over id'er, og du vil forespørge i din database for rækker, der matcher disse id'er.

Lad os sige, at du har følgende liste over id'er:

1,4,6,8

Og så vil du nu forespørge i en tabel for poster, der har nogen af ​​disse værdier (dvs. enten 1, 4, 6 eller 8) i dens ID-kolonne.

Her er to måder at gøre det på.

Mulighed 1:IN-operatøren

En mulighed er at bruge IN operator i din forespørgsel for kun at returnere de rækker, der er angivet på listen.

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

Resultater:

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

Som du kan se, er værdierne i ArtistId kolonne matche dem på listen.

Mulighed 2:STRING_SPLIT()-funktionen

Startende med SQL Server 2016, STRING_SPLIT() funktion kan bruges til at opdele et tegnudtryk ved hjælp af en specificeret separator. Med andre ord kan du bruge den til at opdele en kommasepareret liste.

Her er et eksempel, der bruger de samme data som i det foregående eksempel:

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

Resultat:

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

En fordel ved  STRING_SPLIT() er, at det tillader/(kræver) at du angiver, hvad der bruges som afgrænsning for listen. Dette kan være praktisk, når din liste bruger et andet tegn som afgrænsning.

Her er det samme eksempel, men for en mellemrumsadskilt liste:

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

Resultat:

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

Kompatibilitetsniveau

Bemærk, at STRING_SPLIT() er kun tilgængelig på databaser med et kompatibilitetsniveau på 130 eller derover. Du kan ændre en databases kompatibilitetsniveau med følgende sætning:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

Eller for at bringe det op til SQL Server 2017-niveau:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Hvor MyDatabase er navnet på databasen.

Se også Sådan tjekker du en databases kompatibilitetsniveau i SQL Server.


  1. Tjek overlapning af datointervaller i MySQL

  2. Sådan erstattes NULL med en anden værdi i SQL Server – ISNULL()

  3. Er der en LastIndexOf i SQL Server?

  4. Ufølsomme unikke modelfelter i Django?