通用的 CASE 表达式

通用的 CASE 表达式测试 WHEN 子句中为真的条件。如果它发现为真的条件,则它返回在 THEN 子句中指定的结果。

通用的 CASE 表达式
元素 描述 限制 语法
expr 返回某种数据类型的表达式 在 THEN 子句中的 expr 的数据类型必须与在其他 THEN 子句中的表达式的数据类型相兼容 表达式

数据库服务器以 WHEN 子句在该语句出现的顺序处理它们。如果 WHEN 子句的搜索条件求值为 TRUE,则数据库服务器使用对应的 THEN 表达式的值作为结果,并停止处理该 CASE 表达式。

如果没有 WHEN 条件求值为 TRUE,则数据库服务器使用 ELSE 表达式作为总的结果。如果没有 WHEN 条件求值为 TRUE,且未指定了 ELSE 子句,则返回的 CASE 表达式值为 NULL。您可使用 IS NULL 条件来处理 NULL 结果。要获取更多关于如何处理 NULL 值的信息,请参阅 IS NULL 和 IS NOT NULL 条件

下一示例展示 Projection 子句中通用的 CASE 表达式。

在此示例中,用户检索每一客户的名称和地址以及基于那个顾客存在的问题的数目而计算出的数值:
SELECT cust_name,
          CASE
          WHEN number_of_problems = 0
          THEN 100
          WHEN number_of_problems > 0 AND number_of_problems < 4
          THEN number_of_problems * 500
          WHEN number_of_problems >= 4 and number_of_problems <= 9
          THEN number_of_problems * 400
          ELSE
          (number_of_problems * 300) + 250
          END,
          cust_address
          FROM custtab

在通用的 CASE 表达式中,所有的结果都应为同一数据类型,或它们应求值为以共同兼容的数据类型。如果在所有 WHEN 子句中的结果不是同一数据类型,或如果它们未求值为相互兼容的类型的值,则发生错误。要获取更多关于返回的数据类型的兼容性的信息,请参阅 CASE 表达式数据类型兼容性

1 请参阅 条件