Database
 sql >> база данни >  >> RDS >> Database

2 начина за избор на редове, които съответстват на всички елементи в списък (T-SQL)

Тази статия представя два начина за избор на редове въз основа на списък с идентификатори (или други стойности) в SQL Server. Това може да бъде полезно в сценарии, при които имате разделен със запетая списък с идентификатори и искате да потърсите в базата си данни за редове, които съвпадат с тези идентификатори.

Да приемем, че имате следния списък с идентификатори:

1,4,6,8

И така, сега искате да направите заявка в таблица за записи, които имат някоя от тези стойности (т.е. 1, 4, 6 или 8) в колоната с идентификатор.

Ето два начина да направите това.

Опция 1:IN оператор

Една от опциите е да използвате IN оператор в рамките на вашата заявка, за да върнете само онези редове, които са посочени в списъка.

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

Резултати:

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

Както можете да видите, стойностите в ArtistId колона съвпада с тези в нашия списък.

Опция 2:Функцията STRING_SPLIT()

Започвайки от SQL Server 2016, STRING_SPLIT() функцията може да се използва за разделяне на символен израз с помощта на определен разделител. С други думи, можете да го използвате, за да разделите списък, разделен със запетая.

Ето пример, използващ същите данни като в предишния пример:

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

Резултат:

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

Едно предимство на  STRING_SPLIT() е, че позволява/(изисква) да посочите какво се използва като разделител за списъка. Това може да е удобно, когато списъкът ви използва различен знак като разделител.

Ето същия пример, но за списък, разделен с интервал:

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

Резултат:

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

Ниво на съвместимост

Обърнете внимание, че STRING_SPLIT() е наличен само в бази данни с ниво на съвместимост от 130 или по-високо. Можете да промените нивото на съвместимост на базата данни със следното изявление:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

Или за да го изведете до ниво SQL Server 2017:

ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

Където MyDatabase е името на базата данни.

Вижте също как да проверите нивото на съвместимост на база данни в 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. Система за управление на големи бази данни:проектиране и архитект

  2. Съхранена процедура за получаване на информация за таблици на базата данни

  3. Научете как да създадете PK от Sequence Trigger в SQL Developer

  4. Най-близкото съвпадение, част 3

  5. Не си ти, аз съм (отстраняване на неизправности при I/O)