Usage of CHOOSE in SQL SERVER

322 阅读2分钟

CHOOSE (Transact-SQL)

说明:

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

语法:

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

参数:

index
是一个整数表达式,表示指向其后的项列表的基于1的索引。
如果提供的索引值具有非int的数字数据类型,则该值将隐式转换为整数。 如果索引值超出值数组的范围,则CHOOSE返回null。

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

返回:

从传递给函数的类型集中返回优先级最高的数据类型

例子:

USE [daniel_test_db];
GO

/******************************************************************
*DESCRIPTION : 创建表
*CREATE DATE :  2020/07/20	
*AUTHOR : yuan lau
********************************************************************/
CREATE TABLE [dbo].[t_yuan_lau_choose] ([NationalIDNumber] [BIGINT] NOT NULL PRIMARY KEY,
                                   [LoginID] [NVARCHAR](255) NOT NULL,
                                   [JobTitle] [NVARCHAR](255) NOT NULL,
                                   [BirthDate] [DATE] NOT NULL,
                                   [Gender] [CHAR](1) NOT NULL,
                                   [HireDate] [DATE] NOT NULL, );
GO

/******************************************************************
*DESCRIPTION : 插入测试数据
*CREATE DATE :  2020/07/20	
*AUTHOR : yuan lau
********************************************************************/
INSERT dbo.t_yuan_lau_choose (NationalIDNumber,
                         LoginID,
                         JobTitle,
                         BirthDate,
                         Gender,
                         HireDate)
VALUES (295847284, N'adventure-works\ken0', N'Chief Executive', '1969/01/29', 'F', '2009/01/14'),
       (245797967, N'adventure-works\terri0', N'Vice President of Engineering', '1971/08/01', 'F', '2008/01/31'),
       (509647174, N'adventure-works\roberto0', N'Engineering Manager', '1974/11/12', 'M', '2007/11/11'),
       (112457891, N'adventure-works\rob0', N'Senior Tool Designer', '1974/12/23', 'M', '2007/12/05'),
       (695256908, N'adventure-works\gail0', N'Design Engineer', '1952/09/27', 'F', '2008/01/06'),
       (998320692, N'adventure-works\jossef0', N'Design Engineer', '1959/03/11', 'M', '2008/01/24'),
       (134969118, N'adventure-works\dylan0', N'Research and Development Manager', '1987/02/24', 'M', '2009/02/08'),
       (811994146, N'adventure-works\diane1', N'Research and Development Engineer', '1986/06/05', 'F', '2008/12/29'),
       (658797903, N'adventure-works\gigi0', N'Research and Development Engineer', '1979/01/21', 'F', '2009/01/16'),
       (879342154, N'adventure-works\michale6', N'Research and Development Manager', '1984/11/30', 'M', '2009/05/03');
SELECT [NationalIDNumber],
       [LoginID],
       [JobTitle],
       [BirthDate],
       Birth_Month = CHOOSE(
                         MONTH([BirthDate]),
                         'January',
                         'February',
                         'March',
                         'April',
                         'May',
                         'June',
                         'July',
                         'August',
                         'September',
                         'October',
                         'November',
                         'December'),
       [Gender],
       [HireDate],
       Hire_Month = CHOOSE(
                        DATEPART(MM, [HireDate]),
                        'January',
                        'February',
                        'March',
                        'April',
                        'May',
                        'June',
                        'July',
                        'August',
                        'September',
                        'October',
                        'November',
                        'December')
  FROM dbo.t_yuan_lau_choose;

备注:

CHOOSE的行为就像是数组的索引,该数组由跟随index参数的参数组成。index参数确定将返回以下哪个值。

参考:

微软 Usage of CHOOSE in SQL SERVER