逻辑函数 - CHOOSE(Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure 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 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