DECODE 标量函数

DECODE 函数在参数之间进行等同性比较(也将空值视为相等),以确定作为结果返回的参数。

Read syntax diagramSkip visual syntax diagramDECODE(expression1 ,expression2,result-expression ,else-expression )

该模式是 SYSIBM。

DECODE 函数将每个 expression2expression1 进行比较。 如果 expression1 等于 expression2,或者 expression1expression2 均为空值,那么将返回以下 result-expresssion 的值。 如果 expression2expression1 不匹配,那么将返回 else-expression 的值;否则返回空值。

除了对空值的处理外,DECODE 函数与 CASE 表达式类似:
  • expression1 的空值将与 expression2 的相应空值匹配。
  • 如果将 NULL 关键字用作 DECODE 函数的参数,那么必须将其强制转换为相应的数据类型。
用于确定 DECODE 表达式结果类型的规则基于相应的 CASE 表达式。

示例

  • 示例 1:DECODE 表达式:
       DECODE (c1, 7, 'a', 6, 'b', 'c')
    实现与以下 CASE 表达式相同的结果:
       CASE c1
         WHEN 7 THEN 'a'
         WHEN 6 THEN 'b'
         ELSE 'c'
       END
  • 示例 2:DECODE 表达式:
       DECODE (c1, var1, 'a', var2, 'b')
    其中 c1、var1 和 var2 的值可以为空值,实现与以下 CASE 表达式相同的结果:
       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:也考虑使用以下查询:
       SELECT ID, DECODE(STATUS, 'A', 'Accepted',
                                 'D', 'Denied',
                                 CAST(NULL AS VARCHAR(1)), 'Unknown',
                                 'Other')
       FROM CONTRACTS
    下面是使用 CASE 表达式的相同语句:
       SELECT ID,
         CASE
           WHEN STATUS = 'A' THEN 'Accepted'
           WHEN STATUS = 'D' THEN 'Denied'
           WHEN STATUS IS NULL THEN 'Unknown'
           ELSE 'Other'
         END
       FROM CONTRACTS