DECODE 函数

DECODE 表达式类似于 CASE 表达式,依赖于在指定的列中找到的值,它可打印不同的结果。

DECODE 函数
元素 描述 限制 语法
expr, else_expr, then_expr, when_expr 可对其值和数据类型求值的表达式 when_exprexpr 的数据类型必须相互兼容, then_exprelse_expr 也必须兼容。when_expr 的值不可为 NULL。 表达式

表达式 exprwhen_exprthen_expr 是必需的。DECODEexpr 求值,并将它与 when_expr 比较。如果 when_expr 的值与 expr 的值相匹配,则 DECODE 返回 then_expr

表达式 when_expr then_expr 是表达式对,且您可在 DECODE 函数中指定任意数量的表达式对。在所有情况下,DECODE 都将第一个对的成员与 expr 比较,并返回该对的第二个成员,如果第一个成员与 expr 相匹配的话。

如果没有表达式与 expr 相匹配,则 DECODE 返回 else_expr。如果没有表达式与 expr 相匹配,且您未指定 else_expr,则 DECODE 返回 NULL。

您可为参数指定任何数据类型,但存在两个限制:
  • when_expr 的所有实例必须有相同的数据类型,或必须存在共同的兼容的类型。when_expr 的所有实例还必须有与 expr 相同的(或相兼容的)数据类型。
  • then_expr 的所有实例必须有相同的数据类型,或必须存在共同的兼容的类型。then_expr 的所有实例还必须与 else_expr 有相同的(或相兼容的)数据类型。

DECODE 函数使用与 CASE 表达式相同的数据类型兼容性规则。要获取更多关于返回的数据类型的兼容性的信息,请参阅 CASE 表达式数据类型兼容性

示例

假设用户想要将 students 表的 evaluation 列中的描述性值转换为输出中的数值值。下表展示 students 表的内容。
firstname evaluation   firstname evaluation
Edward Great   Mary Good
Joe Not done   Jim Poor
现在,用户输入一个带有 DECODE 函数的查询,将 evaluation 列中的描述性值转换为等同的数值:
SELECT firstname, DECODE(evaluation,
          'Poor', 0,
          'Fair', 25, 
          'Good', 50, 
          'Very Good', 75,
          'Great', 100, 
          -1) as grade
          FROM students;
下表展示此 SELECT 语句的输出。
firstname evaluation   firstname evaluation
Edward 100   Mary 50
Joe -1   Jim 0