SQL IIF 函数

IIF 函数是 SQL Server 2012 中引入的新的内置逻辑函数,我们可以将其视为编写 IF Else 和 CASE 语句的简写方式。

IIF 函数接受三个参数。第一个参数是布尔表达式,返回 true 或 false。如果 IIF 表达式的结果为 TRUE,则返回第二个参数作为结果。否则,返回第三个参数作为输出。

SQL Server 中 IIF 逻辑函数的语法如下。如果给定的布尔表达式(或测试条件)为 true,则返回 True_Value。如果为 false,则返回 False_Value。

IIF(Boolean_Expression, True_Value, Flase_Value)

SQL Server IIF 比较两个整数

此示例将向您展示 IIF 函数的工作功能。

SELECT 
	IIF(10 > 5, 'TRUE', 'FALSE') AS Result;

从下面的屏幕截图中,您可以看到内部的条件(即 10 > 5)为 TRUE。因此,返回第一个语句(或第二个参数)作为输出,即 TRUE。

SQL Server IIF IF True or False Example 1

IIF 比较两个整数变量

在此示例中,我们将使用 IIF 函数来判断该人是否符合投票资格。

DECLARE @John_age INT = 12,
	@Dave_age INT = 34, 
	@minimum INT = 18  
SELECT IIF( @John_age > @minimum, 'Eligible to Vote', 'Not Eligible to Vote' ) AS Result1;  

SELECT IIF( @Dave_age > @minimum, 'Eligible to Vote', 'Not Eligible to Vote' ) AS Result2;

从下面的屏幕截图中,您可以看到:

  • 在第一个 SELECT 语句中,其中的条件(即 12 > 18)为 false。因此,返回第二个语句(或第三个参数)作为输出。
  • 在第二个 SELECT 语句中,其中的条件(即 34 > 18)为 true。因此,返回第一个语句(或第二个参数)作为输出。
IIF Function 2

SQL Server IIF 比较两个字符串

在此示例中,我们将使用 IIF 函数来比较字符串数据。在这里,我们在第二个 SELECT 语句中使用了 '%' 通配符。因此,我建议您参考 SQL Server 中的 LIKE 文章以供进一步参考。

DECLARE @name AS VARCHAR(50) = 'Tutorial Gateway'
SELECT 
	IIF(@name = 'Tutorial Gateway', 'TRUE', 'FALSE') AS Result1;

SELECT 
	IIF(@name LIKE N'Tutorial%', 'TRUE', 'FALSE') AS Result2;

SELECT 
	IIF (@name = N'Tutorial', 'TRUE', 'FALSE') AS Result3;
Compare two strings Example 3

SQL Server 嵌套 IIF 示例

在此示例中,我们将使用嵌套的 IIF 函数来判断该人是否有资格工作。

DECLARE @age INT = 12

SELECT IIF( @age < 18, 
	     'You are too Young to Work', 
	      IIF(@age >= 18 AND @age <= 60, 
		  'You are eligible to Work', 
		  'You are too Old to Work'
		  )
	    ) AS Result;
  1. 首先,我们声明了一个名为 @age 的整数变量并为其分配了一些值。
  2. 在函数内部,第一个条件验证年龄是否小于 18。如果此条件为 True,则它将返回逗号后的第一个语句(或第二个参数),即“You are too Young to Work”。
  3. 当第一个条件失败时,它返回第二个语句(或第三个参数)。通过使用嵌套的 IIF,我们在此处检查另一个条件(@age >= 18 AND @age <= 60)。如果此条件为 True,则返回逗号后的第一个值,即“You are eligible to Work”。
  4. 如果嵌套条件失败,它将执行第三个参数中的值,即“You are too Old to Work”。

输出 1:年龄 = 12

Nested IIF Function 4

年龄 = 32

Result
-----
You are eligible to Work

年龄 = 65

Result
-----
You are too Old to Work

SQL Server IIF 使用 NULL 值

在使用 NULL 值时,您需要格外小心。以下一系列示例将帮助您理解其中的后果。

SELECT 
	IIF(10 > 5, NULL, NULL) AS Result;
IIF function working with Null Values throwing error 8133

从上面的屏幕截图中,您可以看到它正在抛出错误。说布尔表达式(即布尔表达式后的第二个或第三个参数)的至少一个结果表达式必须是 NULL 常量以外的表达式。让我们相应地更改它们并查看。

SELECT 
	IIF(10 > 5, 'TRUE', NULL) AS Result1;

SELECT 
	IIF(10 > 5, NULL, 'FALSE') AS Result2;

IIF NULL 值选项 2

我们可以通过参数来克服由 NULL 常量引起的 IIF 函数错误。

DECLARE @a INT = NULL,
        @b INT = NULL
		 
SELECT IIF ( 10 > 5, @a, @b ) AS Result1;
Result1
-------
NULL

IIF 数据类型及其最高优先级

IIF 函数将返回具有最高优先级的的数据类型。从以下示例中,结果将是整数类型的第三个参数(即 100),但结果显示为 100.00。因为它将返回最高优先级别的数据类型。请参考 IF ElseCASE Statement 文章。

SELECT 
	IIF ( 15 > 50, 12.45, 100 ) AS Result;
Result
------
100.00

评论已关闭。