适用于:SQL Server
Azure SQL 数据库
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 Repository GitHub 存储库下载这些数据库。
A. 选择示例
以下示例返回值列表中的第三项。
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 配合使用 CHOOSE 和 MONTH
以下示例返回产品型号最后修改的季节。 该 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