

# 第100章 SQL函数 NULLIF   

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

# 大纲

```java
NULLIF(expression1,expression2)
```

# 参数

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

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

# 描述

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

`NULLIF` 等价于：

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

# NULL 处理函数比较

下表显示了各种 `SQL` 比较函数。如果逻辑比较测试为 `True`（`A` 与 `B` 相同），则每个函数返回一个值，如果逻辑比较测试为 `False`（`A` 与 `B` 不同），则返回另一个值。这些函数允许执行 `NULL` 逻辑比较。不能在实际相等（或不相等）条件比较中指定 `NULL`。


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

# 示例

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

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

