逻辑函数 - CHOOSE (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

在 SQL Server 中从值列表返回指定索引处的项。

Transact-SQL 语法约定

语法

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

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

index

一个整数表达式,表示其后的项列表的从 1 开始的索引。

如果提供的索引值具有 int 之外的数值数据类型,则该值将隐式转换为整数。 如果索引值超出了值数组的界限,则 CHOOSE 返回 Null。

val_1 … val_n

任何数据类型的逗号分隔的值列表。

返回类型

从传递到函数的类型集中返回优先级最高的数据类型。 有关详细信息,请参阅数据类型优先级 (Transact-SQL)

备注

CHOOSE 像索引一样进入数组中,其中,数组由跟在索引参数之后的各参数组成。 索引参数确定将返回以下哪些值。

示例

A. 简单的 CHOOSE 示例

下面的示例从所提供的值列表中返回第三项。

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

下面是结果集:

Result  
-------------  
Developer  
  
(1 row(s) affected)  

B. 基于列的简单 CHOOSE 示例

以下示例基于 ProductCategoryID 列中的值返回简单字符串。

USE AdventureWorks2022;  
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  
  
(4 row(s) affected)  
  

C. 配合使用 CHOOSE 和 MONTH

以下示例返回上次修改产品型号时的季节。 MONTH 函数用于从 ModifiedDate 列返回月份值。 CHOOSE 函数用于分配北半球季节。 此示例使用 AdventureWorksLT 数据库,该数据库可以快速安装为新 Azure SQL 数据库的示例数据库。 有关详细信息,请参阅 AdventureWorks sample databases(AdventureWorks 示例数据库)。

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

(10 rows affected)

后续步骤