条件表达式

CASE

标准 SQL CASE 表达式具有两种形式。“简单”形式从左向右搜索每个 value 表达式,直到找到一个等于 expression 的表达式:

CASE expression
    WHEN value THEN result
    [ WHEN ... ]
    [ ELSE result ]
END

会返回匹配的 valueresult。如果没有找到任何匹配项,那么如果存在 ELSE 子句,则返回该子句中的 result,否则返回 NULL。示例:

SELECT a,
       CASE a
           WHEN 1 THEN 'one'
           WHEN 2 THEN 'two'
           ELSE 'many'
       END

“搜索”形式从左向右计算每个 boolean 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[, …])

返回参数列表中的第一个非 NULL 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

TRYNULL 值:

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: Division by zero

TRYCOALESCE 的默认值:

SELECT COALESCE(TRY(total_cost / packages), 0) AS per_package FROM shipping;
per_package
-------------
         4
        14
         0
        19
(4 rows)

有奖捉虫

“有虫”文档片段

0/500

存在的问题

文档存在风险与错误

● 拼写,格式,无效链接等错误;

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 版本号不匹配:文档版本或内容描述和实际软件不一致;

● 对重要数据或系统存在风险的操作,缺少安全提示;

● 排版不美观,影响阅读;

内容描述不清晰

● 描述存在歧义;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

内容获取有困难

● 很难通过搜索引擎,openLooKeng官网,相关博客找到所需内容;

示例代码错误

● 命令、命令参数等错误;

● 命令无法执行或无法完成对应功能;

内容有缺失

● 关键步骤错误或缺失,无法指导用户完成任务,比如安装、配置、部署等;

● 逻辑不清晰,该分类、分项、分步骤的没有给出

● 图形、表格、文字等晦涩难懂

● 缺少必要的前提条件、注意事项等;

● 描述存在歧义

0/500

您对文档的总体满意度

非常不满意
非常满意

请问是什么原因让您参与到这个问题中

您的邮箱

创Issue赢奖品
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
有奖捉虫