SQL CHOOSE 函数

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 CHOOSE function 1

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;
Index Out of Range 2

在此 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;
CHOOSE function With Decimal Values 3

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;
String Arguments 4

在这里,SQL Server 无法将 Varchar 值 one 转换为整数数据类型。因此,它会引发错误。

SELECT CHOOSE('one', 'Cherry', 'Orange', 'Kiwi', 'Apple') AS Result3;
CHOOSE function 5

实际示例

在此示例中,我们使用 AdventureWorks 数据库,用于提取数据的查询如下所示

SELECT TOP 10 
       [NationalIDNumber]
      ,[LoginID]
      ,[JobTitle]
      ,[BirthDate]
      ,[Gender]
      ,[HireDate]
  FROM [AdventureWorks2014].[HumanResources].[Employee]

下面的屏幕截图将向您展示表中的数据。在此示例中,我们将使用 CHOOSE 函数将月份数字转换为一月、二月等。

CHOOSE function 6

从下面的 CHOOSE 函数代码片段中,您可以看到我们可以使用内置函数 MONTHDATEPART 来提取月份数字。这就是为什么我们同时使用了这两个函数

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]
CHOOSE function 7