論理関数 - CHOOSE(Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウスMicrosoft Fabric の SQL データベース

CHOOSE Transact-SQL関数はデータベース エンジン内の値のリストから指定されたインデックスのアイテムを返します。

Transact-SQL 構文表記規則

構文

CHOOSE ( index , val_1 , val_2 [ , val_n ] )

引数

インデックス

この引数に続くアイテム リストのインデックス (1 から始まるインデックス) を表す整数式。

提供されたインデックス値に 整数以外の数値データ型がある場合、その値は暗黙的に整数に変換されます。 インデックス値が配列の値の範囲を超えると、 CHOOSENULLを返します。

val_1...val_n

任意のデータ型のコンマ区切られた値の一覧。

戻り値の型

関数に渡される一連の型の中から最も優先順位の高いデータ型を返します。 詳細については、「 Data 型の優先順位」を参照してください。

注釈

CHOOSE 配列はインデックスのように機能し、配列はインデックス引数の後に続く引数で構成されます。 インデックス引数は、 CHOOSE 返す次のどの値を決定します。

CHOOSE節に非常に多くの値(コンマで区切られた数千の値)を明示的に含めると、リソースを消費し、以下のエラーを返すことがあります。

Msg 8631, Level 17, State 1, Line 1
Internal error: Server stack limit has been reached. Please look for potentially deep nesting in your query, and try to simplify it.

例

この記事のコードサンプルは、AdventureWorks2025、AdventureWorksDW2025、またはAdventureWorksLT2025サンプルデータベースを使用しており、Azure Data SQL Samples Repository GitHubリポジトリからダウンロードできます。

A. CHOOSE例

以下の例は、値のリストから3番目の項目を返します。

SELECT CHOOSE(3, 'Manager', 'Director', 'Developer', 'Tester') AS Result;

結果セットは次のとおりです。

Result
-------------
Developer

B. 列に基づくCHOOSE例

以下の例は、 ProductCategoryID 列の値に基づく基本的な文字文字列を返します。

USE AdventureWorks2025;
GO

SELECT ProductCategoryID,
       CHOOSE(ProductCategoryID, 'A', 'B', 'C', 'D', 'E') AS Expression1
FROM Production.ProductCategory;

結果セットは次のとおりです。

ProductCategoryID Expression1
----------------- -----------
3                 C
1                 A
2                 B
4                 D

C: MONTH と組み合わせた CHOOSE

以下の例は、製品モデルが最後に修正されたシーズンを返します。 MONTH関数はModifiedDate列の月値を返します。

USE AdventureWorksLT;
GO

SELECT Name,
       ModifiedDate,
       CHOOSE(MONTH(ModifiedDate), 'Winter', 'Winter', 'Spring', 'Spring', 'Spring', 'Summer', 'Summer', 'Summer', 'Autumn', 'Autumn', 'Autumn', 'Winter') AS Quarter_Modified
FROM SalesLT.ProductModel AS PM
WHERE Name LIKE '%Frame%'
ORDER BY ModifiedDate;

結果セットは次のとおりです。

Name                        ModifiedDate            Quarter_Modified
--------------------------- ----------------------- ----------------
HL Road Frame               2002-05-02 00:00:00.000 Spring
HL Mountain Frame           2005-06-01 00:00:00.000 Summer
LL Road Frame               2005-06-01 00:00:00.000 Summer
ML Road Frame               2005-06-01 00:00:00.000 Summer
ML Road Frame-W             2006-06-01 00:00:00.000 Summer
ML Mountain Frame           2006-06-01 00:00:00.000 Summer
ML Mountain Frame-W         2006-06-01 00:00:00.000 Summer
LL Mountain Frame           2006-11-20 09:56:38.273 Autumn
HL Touring Frame            2009-05-16 16:34:28.980 Spring
LL Touring Frame            2009-05-16 16:34:28.980 Spring