第100章 SQL函数 NULLIF

172 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

第100章 SQL函数 NULLIF

如果两个表达式具有相同的值,则返回 NULL 的函数。

大纲

NULLIF(expression1,expression2)

参数

  • expression1 - 表达式,可以是列名、数字或字符串文字、主变量或另一个标量函数的结果。
  • expression2 - 表达式,可以是列名、数字或字符串文字、主变量或另一个标量函数的结果。

NULLIF 返回与 expression1 相同的数据类型。

描述

如果 expression1 的值等于 expression2 的值,则 NULLIF 函数返回 NULL。否则,它返回 expression1 值。

NULLIF 等价于:

SELECT CASE 
WHEN value1 = value2 THEN NULL
ELSE value1
END
FROM MyTable

日期和时间显示转换

某些检查表达式数据类型需要从逻辑模式转换为ODBC模式或显示模式。例如日期和时间数据类型。如果替换表达式值不是相同的数据类型,则不能在ODBC模式或显示模式下转换此值,并生成SQLCODE错误:日期数据类型为-146;时间数据类型为-147。例如,ISNULL(DOB,'nodate')不能在ODBC模式或显示模式下执行;它会发出SQLCODE-146错误,并显示 %msg Error: 'nodate' is an invalid ODBC/JDBC Date value or Error: 'nodate' is an invalid DISPLAY Date value。要在ODBC模式或显示模式下执行此语句,必须将值强制转换为适当的数据类型:ISNULL(DOB,CAST('nodate' as DATE))。这将导致日期0,显示为1840-12-31

NULL 处理函数比较

下表显示了各种 SQL 比较函数。如果逻辑比较测试为 TrueAB 相同),则每个函数返回一个值,如果逻辑比较测试为 FalseAB 不同),则返回另一个值。这些函数允许执行 NULL 逻辑比较。不能在实际相等(或不相等)条件比较中指定 NULL

SQL FunctionComparisonTest Return Value
IFNULL(ex1,ex2) [two-argument form]ex1 = NULLTrue returns ex2 False returns NULL
IFNULL(ex1,ex2,ex3) [three-argument form]ex1 = NULLTrue returns ex2 False returns ex3
{fn IFNULL(ex1,ex2)}ex1 = NULLTrue returns ex2 False returns ex1
ISNULL(ex1,ex2)ex1 = NULLTrue returns ex2 False returns ex1
NVL(ex1,ex2)ex1 = NULLTrue returns ex2 False returns ex1
NULLIF(ex1,ex2)ex1 = ex2True returns NULL False returns ex1
COALESCE(ex1,ex2,...)ex = NULL for each argumentTrue tests next ex argument. If all ex arguments are True (NULL), returns NULL. False returns ex

示例

以下示例使用 NULLIF 函数将 Age=20 的所有记录的显示字段设置为空:

SELECT Name,Age,NULLIF(Age,20) AS Nulled20
FROM Sample.Person

image.png