この記事では、SQL ServerのID(またはその他の値)のリストに基づいて行を選択する2つの方法を紹介します。これは、IDのコンマ区切りリストがあり、それらのIDに一致する行をデータベースに照会する場合に役立ちます。
次のIDのリストがあるとします。
1,4,6,8
そのため、ID列にこれらの値(1、4、6、または8のいずれか)が含まれるレコードをテーブルに照会する必要があります。
これを行うには2つの方法があります。
オプション1:IN演算子
1つのオプションは、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()
のメリットの1つ これは、リストの区切り文字として使用されているものを指定できる/(必須)ということです。これは、リストで区切り文字として別の文字を使用している場合に便利です。
これは同じ例ですが、スペースで区切られたリストの場合:
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
データベースの名前です。
SQLServerでデータベースの互換性レベルを確認する方法も参照してください。