条件表达式¶
CASE¶
标准 SQL CASE 表达式有两种形式。 “简单”形式从左到右搜索每个 value 表达式,直到找到一个等于 expression 的表达式。
CASE expression
WHEN value THEN result
[ WHEN ... ]
[ ELSE result ]
END
返回匹配 value 的 result。 如果没有找到匹配项,则返回 ELSE 子句中的 result(如果存在),否则返回 null。 示例
SELECT a,
CASE a
WHEN 1 THEN 'one'
WHEN 2 THEN 'two'
ELSE 'many'
END
“搜索”形式从左到右评估每个布尔值 condition,直到找到一个为 true 的条件,并返回匹配的 result。
CASE
WHEN condition THEN result
[ WHEN ... ]
[ ELSE result ]
END
如果没有任何条件为 true,则返回 ELSE 子句中的 result(如果存在),否则返回 null。 示例
SELECT a, b,
CASE
WHEN a = 1 THEN 'aaa'
WHEN b = 2 THEN 'bbb'
ELSE 'ccc'
END
IF¶
IF 函数实际上是一个语言结构,等效于以下 CASE 表达式
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[, ...])¶
返回参数列表中的第一个非空
value。 与CASE表达式类似,参数仅在必要时进行评估。
NULLIF¶
- nullif(value1, value2)¶
如果
value1等于value2,则返回 null,否则返回value1。
TRY¶
- try(expression)¶
评估表达式并通过返回
NULL来处理某些类型的错误。
在希望查询在遇到损坏或无效数据时产生 NULL 或默认值而不是失败的情况下,TRY 函数可能很有用。 要指定默认值,可以使用 TRY 函数与 COALESCE 函数一起使用。
以下错误由 TRY 处理
除以零
无效的强制转换参数或无效的函数参数
数值超出范围
示例¶
包含一些无效数据的源表
SELECT * FROM shipping;
origin_state | origin_zip | packages | total_cost
--------------+------------+----------+------------
California | 94131 | 25 | 100
California | P332a | 5 | 72
California | 94025 | 0 | 155
New Jersey | 08544 | 225 | 490
(4 rows)
没有 TRY 的查询失败
SELECT CAST(origin_zip AS BIGINT) FROM shipping;
Query failed: Can not cast 'P332a' to BIGINT
使用 TRY 的 NULL 值
SELECT TRY(CAST(origin_zip AS BIGINT)) FROM shipping;
origin_zip
------------
94131
NULL
94025
08544
(4 rows)
没有 TRY 的查询失败
SELECT total_cost / packages AS per_package FROM shipping;
Query failed: / by zero
使用 TRY 和 COALESCE 的默认值
SELECT COALESCE(TRY(total_cost / packages), 0) AS per_package FROM shipping;
per_package
-------------
4
14
0
19
(4 rows)