CASE 表达式

CASE 表达式条件表达式,类似于编程语言中的 CASE 语句。当要更改表示数据的方式时,可以使用 CASE 表达式。CASE 表达式允许语句返回若干可能结果之一,这取决于若干条件测试中哪一个求值为 TRUE。

在 CASE 表达式中不允许 TEXT 或 BYTE 值。

考虑用数字表示婚姻状态的列,1 、2 、3 和 4 是相应表示单身、已婚、离异和丧偶的值。在某些情况下,考虑到数据库的效率,您可能更想存储短的值(1 、2 、3 和 4),但人力资源部的职员可能更具有描述性的值(单身、已婚、离异和丧偶)。CASE 表达式简化了这种不同值集之间的转换。

下列示例显示具有多个 WHEN 子句的 CASE 表达式,它返回 stock 表的 manu_code 列更具有描述性的值。如果没有任何 WHEN 条件为 true,那么 NULL 是缺省的结果。(可以省略 ELSE NULL 子句。)
SELECT
          CASE
          WHEN manu_code = "HRO" THEN "Hero"
          WHEN manu_code = "SHM" THEN "Shimara"
          WHEN manu_code = "PRC" THEN "ProCycle"
          WHEN manu_code = "ANZ" THEN "Anza"
          ELSE NULL
          END
          FROM stock; 

在 CASE 表达式中必须至少包含一个 WHEN 子句;后续的 WHEN 子句和 ELSE 子句是可选的。如果没有 WHEN 条件求值为 true,那么结果值为 NULL。可以使用 IS NULL 表达式来处理为 NULL 值的结果。有关处理值(NULL)的信息,请参阅 GBase 8s SQL 指南:语法

下列查询显示了简单的 CASE 表达式,它返回一个字符串值来标记 orders 表中尚未交付给客户的任何订单。

图: 查询

SELECT order_num, order_date,
          CASE 
          WHEN ship_date IS NULL
          THEN "order not shipped"
          END 
          FROM orders;

图: 查询结果

order_num order_date (expression)
            
            1001 05/20/1998
            1002 05/21/1998
            1003 05/22/1998
            1004 05/22/1998
            1005 05/24/1998
            1006 05/30/1998 order not shipped
            1007 05/31/1998
            ⋮
            1019 07/11/1998
            1020 07/11/1998
            1021 07/23/1998
            1022 07/24/1998
            1023 07/24/1998

有关如何使用 CASE 表达式来更新列的信息,请参阅更新列的 CASE 表达式