单个表的 SELECT 语句 / 表达式和派生的值 |
CASE 表达式条件表达式,类似于编程语言中的 CASE 语句。当要更改表示数据的方式时,可以使用 CASE 表达式。CASE 表达式允许语句返回若干可能结果之一,这取决于若干条件测试中哪一个求值为 TRUE。
在 CASE 表达式中不允许 TEXT 或 BYTE 值。
考虑用数字表示婚姻状态的列,1 、2 、3 和 4 是相应表示单身、已婚、离异和丧偶的值。在某些情况下,考虑到数据库的效率,您可能更想存储短的值(1 、2 、3 和 4),但人力资源部的职员可能更具有描述性的值(单身、已婚、离异和丧偶)。CASE 表达式简化了这种不同值集之间的转换。
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 指南:语法。
图: 查询
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 表达式。