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。

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。因此,返回第一个语句(或第二个参数)作为输出。

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;

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

年龄 = 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;

从上面的屏幕截图中,您可以看到它正在抛出错误。说布尔表达式(即布尔表达式后的第二个或第三个参数)的至少一个结果表达式必须是 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 Else 和 CASE Statement 文章。
SELECT IIF ( 15 > 50, 12.45, 100 ) AS Result;
Result
------
100.00
评论已关闭。