通用的 CASE 表达式测试 WHEN 子句中为真的条件。如果它发现为真的条件,则它返回在 THEN 子句中指定的结果。
元素 | 描述 | 限制 | 语法 |
---|---|---|---|
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 表达式数据类型兼容性。