邏輯函式 - CHOOSE(Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Microsoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉庫Microsoft Fabric 中的 SQL 資料庫

CHOOSE Transact-SQL 函式會從資料庫引擎中的值清單中回傳指定索引的項目。

Transact-SQL 語法慣例

語法

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

引數

index

一個整數表達式,代表以 1 為基礎的索引,指向其後項目的清單。

若所提供的索引值有非 整數的數值資料型態,則該值會隱含轉換為整數。 若索引值超過數值陣列的範圍,則 CHOOSE 回傳 NULL。

val_1......val_n

任何資料型別逗號分隔值列表。

傳回類型

從通過功能的類型集中,傳回優先順序最高的資料類型。 如需詳細資訊,請參閱 數據類型優先順序。

備註

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 儲存庫 GitHub 儲存庫下載。

A. 選擇範例

以下範例會回傳值列表中的第三項。

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

結果集如下所示。

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

B. 根據欄位選擇範例

以下範例會回傳一個基於欄位值 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