条件表达式¶
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)