CHOOSE 函数是 SQL Server 2012 中引入的新的内置逻辑函数。此 CHOOSE 函数从项目列表中返回指定索引处的项。
CHOOSE 逻辑函数的语法如下所示。其中,Value1、Value2…、ValueN 是项目数组。
CHOOSE (Index, Value1, Value2, ....,ValueN)
Index: 请指定所需项目的索引位置。索引位置应从 1 开始。
- 如果指定的索引值具有整数以外的数字数据类型,则该数字值将隐式转换为整数类型。例如,10.68 将转换为 10。
- 如果指定索引处没有项目或索引超出范围,则 CHOOSE 函数返回 NULL 值。
SQL Server CHOOSE 函数示例
此示例将向您展示 CHOOSE 函数的工作功能。
SELECT CHOOSE(1, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result1; SELECT CHOOSE(2, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result2; SELECT CHOOSE(3, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result3; SELECT CHOOSE(4, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result4;

SQL Server CHOOSE 函数索引超出范围
在此示例中,我们将使用索引值为 0、负索引值和非索引值的 CHOOSE 函数。
SELECT CHOOSE(0, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result1; SELECT CHOOSE(-2, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result2; SELECT CHOOSE(6, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result3;

在此 CHOOSE 函数示例中,以下语句返回 NULL 值,因为索引值应从 1 开始或大于 1。
SELECT CHOOSE(0, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result1; SELECT CHOOSE(-2, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result2;
下面的 SQL Server 语句返回 NULL 值,因为我们传递的索引值为六。而我们在第六个位置没有任何项目。
SELECT CHOOSE(6, 'Apple', 'Orange', 'Kiwi', 'Cherry') AS Result3;
小数
在此示例中,我们将使用数字或小数的 CHOOSE 函数。这里,小数将四舍五入为整数。这意味着 1.95 将四舍五入为 1,2.05 和 2.99 将四舍五入为 2。
SELECT CHOOSE(1.95, 'Cherry', 'Orange', 'Kiwi', 'Apple') AS Result1; SELECT CHOOSE(2.05, 'Cherry', 'Orange', 'Kiwi', 'Apple') AS Result2; SELECT CHOOSE(2.99, 'Cherry', 'Orange', 'Kiwi', 'Apple') AS Result3;

SQL Server CHOOSE 函数字符串值
在此示例中,我们将 CHOOSE 函数与字符串值一起使用。这里 varchar 1 和 3 将被转换为整数数据类型。
SELECT CHOOSE('1', 'Cherry', 'Orange', 'Kiwi', 'Apple') AS Result1;
SELECT CHOOSE('3', 'Cherry', 'Orange', 'Kiwi', 'Apple') AS Result2;

在这里,SQL Server 无法将 Varchar 值 one 转换为整数数据类型。因此,它会引发错误。
SELECT CHOOSE('one', 'Cherry', 'Orange', 'Kiwi', 'Apple') AS Result3;

实际示例
在此示例中,我们使用 AdventureWorks 数据库,用于提取数据的查询如下所示
SELECT TOP 10
[NationalIDNumber]
,[LoginID]
,[JobTitle]
,[BirthDate]
,[Gender]
,[HireDate]
FROM [AdventureWorks2014].[HumanResources].[Employee]
下面的屏幕截图将向您展示表中的数据。在此示例中,我们将使用 CHOOSE 函数将月份数字转换为一月、二月等。

从下面的 CHOOSE 函数代码片段中,您可以看到我们可以使用内置函数 MONTH 和 DATEPART 来提取月份数字。这就是为什么我们同时使用了这两个函数
SELECT [NationalIDNumber]
,[LoginID]
,[JobTitle]
,[BirthDate]
,CHOOSE(MONTH([BirthDate]),'January','February','March','April','May','June',
'July','August','September','October','November','December') AS Birth_Month
,[Gender]
,[HireDate]
,CHOOSE(DATEPART(MM, [HireDate]),'January','February','March','April','May','June',
'July','August','September','October','November','December') AS Hire_Month
FROM [SQL Tutorial].[dbo].[SQL Choose]
