適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉庫
Microsoft Fabric 中的 SQL 資料庫
CHOOSE 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