DECODE 标量函数
DECODE 函数在参数之间进行等同性比较(也将空值视为相等),以确定作为结果返回的参数。
该模式是 SYSIBM。
DECODE 函数将每个 expression2 与 expression1 进行比较。 如果 expression1 等于 expression2,或者 expression1 和 expression2 均为空值,那么将返回以下 result-expresssion 的值。 如果 expression2 与 expression1 不匹配,那么将返回 else-expression 的值;否则返回空值。
除了对空值的处理外,DECODE 函数与 CASE 表达式类似:
- expression1 的空值将与 expression2 的相应空值匹配。
- 如果将 NULL 关键字用作 DECODE 函数的参数,那么必须将其强制转换为相应的数据类型。
示例
- 示例 1:DECODE 表达式:
实现与以下 CASE 表达式相同的结果:DECODE (c1, 7, 'a', 6, 'b', 'c')CASE c1 WHEN 7 THEN 'a' WHEN 6 THEN 'b' ELSE 'c' END - 示例 2:DECODE 表达式:
其中 c1、var1 和 var2 的值可以为空值,实现与以下 CASE 表达式相同的结果:DECODE (c1, var1, 'a', var2, 'b')CASE WHEN c1 = var1 OR (c1 IS NULL AND var1 IS NULL) THEN 'a' WHEN c1 = var2 OR (c1 IS NULL AND var2 IS NULL) THEN 'b' ELSE NULL END - 示例 3:也考虑使用以下查询:
下面是使用 CASE 表达式的相同语句:SELECT ID, DECODE(STATUS, 'A', 'Accepted', 'D', 'Denied', CAST(NULL AS VARCHAR(1)), 'Unknown', 'Other') FROM CONTRACTSSELECT ID, CASE WHEN STATUS = 'A' THEN 'Accepted' WHEN STATUS = 'D' THEN 'Denied' WHEN STATUS IS NULL THEN 'Unknown' ELSE 'Other' END FROM CONTRACTS
