CASE

标准 SQL 的 CASE 表达式有两种形式。

“简单” CASE 表达式的语法如下:

1
2
3
4
5
CASE expression
WHEN value THEN result
[ WHEN ... ]
[ ELSE result ]
END

它会从左到右逐个检查每个值表达式 value,直到找到与条件表达式 expression 相等的表达式为止。然后返回相应的 result 表达式。如果未找到匹配的表达式,则返回 ELSE 子句中的 result 表达式(如果有的话),否则返回 null。

例如:

1
2
3
4
5
6
SELECT a,
CASE a
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'many'
END

“搜索”形式的 CASE 表达式允许使用任意布尔条件判断结果表达式。其语法如下:

1
2
3
4
5
CASE
WHEN condition THEN result
[ WHEN ... ]
[ ELSE result ]
END

它会从左到右计算每个条件表达式,直到有一个表达式为 True,然后返回相应的 result 表达式。如果所有条件表达式均为 FALSE,则返回 ELSE 子句中的 result 表达式(如果有的话),否则返回 null。

例如:

1
2
3
4
5
6
SELECT a, b,
CASE
WHEN a = 1 THEN 'aaa'
WHEN b = 2 THEN 'bbb'
ELSE 'ccc'
END

IF

IF 函数实际上是一个编程语言结构,相当于以下的 CASE 表达式:

1
2
3
4
CASE
WHEN condition THEN true_value
[ ELSE false_value ]
END

if(condition, true_value)

如果 condition 为 true,则计算 true_value 表达式并返回计算结果,否则返回 null 且不计算 true_value 表达式。

if(condition, true_value, false_value)

如果 condition 为 true,则计算 true_value 表达式并返回计算结果,否则计算 false_value 表达式并返回计算结果。

COALESCE

coalesce(value1, value2[, ])

从参数列表中返回第一个非空的值。和 CASE 表达式一样,参数只在必要时才会被计算。

NULLIF

nullif(value1, value2)

如果 value1 等于 value2 ,则返回 null,否则返回 value1

(END)