DECODE 函数

可以使用 DECODE 函数来将具有一个值的表达式转换为另一个值。DECODE 函数具有以下格式:
DECODE(test, a, a_value, b, b_value, ..., n, n_value, exp_m )

在通常情况下,当 a 等于 testDECODE 函数返回 a_value,当 b 等于 test 时,返回 b_value,当 n 等于 test 时返回 n_value

如果有若干表达式与 test 匹配,那么 DECODE 返回找到的第一个表达式的 n_value。如果没有表达式与 test 匹配,那么 DECODE 返回 exp_m;;如果没有表达式与 test 匹配并且不存在 exp_m,那么 DECODE 返回 NULL。

限制: DECODE 函数不支持类型为 TEXT 或 BYTE 的参数。
假设包括 emp_idevaluation 列的 employee 表存在。此外还假设对 employee 表执行下列查询则返回以下所示的行。

图: 查询

SELECT emp_id, evaluation FROM employee;

图: 查询结果

emp_id          evaluation
            
            012233          great
            012344          poor
            012677          NULL
            012288          good
            012555          very good
在某些情况下,您可能想要转换一组值。例如:假设您想要将前一示例中 evaluation 列的描述值转换为相应的数字值。下列查询显示如何使用 DECODE 函数来针对 employee 表中的每一行将 evaluation 列中的值转换为数字值。

图: 查询

SELECT emp_id, DECODE(evaluation, "poor", 0, "fair", 25, "good",
          50, "very good", 75, "great", 100, -1) AS evaluation 
          FROM employee;

图: 查询结果

emp_id         evaluation
            
            012233          100
            012344          0
            012677          -1
            012288          50
            012555          75
            ⋮
可为 DECODE 函数的参数指定任何数据类型,只要这些参数满足以下需求:
  • 参数 testab 、... 、n 都具有相同的数据类型或求值为公共兼容的数据类型。
  • 参数 a_valueb_value 、... 、n_value 都具有相同的数据类型或求值为公共兼容的数据类型。