Database
 sql >> Baza danych >  >> RDS >> Database

2 sposoby wybierania wierszy, które pasują do wszystkich pozycji na liście (T-SQL)

W tym artykule przedstawiono dwa sposoby wybierania wierszy na podstawie listy identyfikatorów (lub innych wartości) w programie SQL Server. Może to być przydatne w sytuacjach, w których masz listę identyfikatorów oddzielonych przecinkami i chcesz przeszukać bazę danych w poszukiwaniu wierszy, które pasują do tych identyfikatorów.

Załóżmy, że masz następującą listę identyfikatorów:

1,4,6,8

Dlatego teraz chcesz zapytać tabelę o rekordy, które mają dowolną z tych wartości (tj. 1, 4, 6 lub 8) w kolumnie ID.

Oto dwa sposoby na zrobienie tego.

Opcja 1:Operator IN

Jedną z opcji jest użycie IN operatora w zapytaniu, aby zwrócić tylko te wiersze, które są określone na liście.

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

Wyniki:

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

Jak widać, wartości w ArtistId kolumna pasuje do tych z naszej listy.

Opcja 2:Funkcja STRING_SPLIT()

Począwszy od SQL Server 2016, STRING_SPLIT() Funkcja może służyć do dzielenia wyrażenia znakowego przy użyciu określonego separatora. Innymi słowy, możesz go użyć do podzielenia listy rozdzielanej przecinkami.

Oto przykład wykorzystujący te same dane, co w poprzednim przykładzie:

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

Wynik:

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

Jedna z zalet  STRING_SPLIT() jest to, że pozwala/(wymaga) określić, co jest używane jako ogranicznik dla listy. Może to być przydatne, gdy Twoja lista używa innego znaku jako ogranicznika.

Oto ten sam przykład, ale dla listy oddzielonej spacjami:

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

Wynik:

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

Poziom zgodności

Zauważ, że STRING_SPLIT() jest dostępna tylko w bazach danych o poziomie zgodności 130 lub wyższym. Możesz zmienić poziom zgodności bazy danych za pomocą następującej instrukcji:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

Lub podnieś go do poziomu SQL Server 2017:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Gdzie MyDatabase to nazwa bazy danych.

Zobacz także Jak sprawdzić poziom zgodności bazy danych w SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zatrzask FGCB_ADD_REMOVE

  2. Nie twórz na ślepo tych brakujących indeksów!

  3. Zaawansowany SQL:odmiany i różne przypadki użycia instrukcji Insert T-SQL

  4. Język kontroli danych SQL

  5. Jak zainstalować klienta SQL SQuirrel?