Oracle DECODE() 函数使用指南

Oracle DECODE() 是一个内置函数,它根据一个或多个给定的映射关系将给定的参数解码并返回解码后的值。

Oracle DECODE() 语法

这里是 Oracle DECODE() 函数的语法:

DECODE(expr, search, result [, search, result ]...  [, default ])

参数

expr

必需的。需要解码的内容。

search

必需的。一个匹配项。

result

必需的。search 对应的值。

default

必需的。 默认值。 默认值为 NULL。

这些参数可以是任何数字类型(NUMBER、BINARY_FLOAT 或 BINARY_DOUBLE)或字符类型。

您可以提供多个 search 和 result 对儿,您可以将这些 search 和 result 对儿视为一个映射表。

返回值

Oracle DECODE() 函数将每个 search 逐个的和 expr 比较,如果 expr 和 search 相等,此函数返回对应的 result。如果没有发现匹配项,此函数返回 default (默认值为 NULL)。

如果任意一个参数为 NULL, DECODE() 将返回 NULL。

Oracle DECODE() 示例

这里有几个展示了 Oracle DECODE() 函数用法的示例。

基本用法

Oracle DECODE() 函数很适合用来翻译一些内容,比如,将状态值翻译为状态说明。

我们使用 UNION 模拟一个包含了订单状态的结果集:

SELECT 10001 order_id, 1 order_status FROM dual
UNION
SELECT 10002, 2 FROM dual
UNION
SELECT 10003, 3 FROM dual
UNION
SELECT 10004, 4 FROM dual;

输出:

   ORDER_ID    ORDER_STATUS
___________ _______________
      10001               1
      10002               2
      10003               3
      10004               4

下面的语句将订单状态翻译为状态说明:

SELECT
    t.*,
    DECODE(
        order_status,
        1, 'Pending',
        2, 'Paid',
        3, 'Shipped',
        'Unknown'
    ) order_status_desc
FROM
    (
        SELECT 10001 order_id, 1 order_status FROM dual
        UNION
        SELECT 10002, 2 FROM dual
        UNION
        SELECT 10003, 3 FROM dual
        UNION
        SELECT 10004, 4 FROM dual
    ) t;

输出:

   ORDER_ID    ORDER_STATUS ORDER_STATUS_DESC
___________ _______________ ____________________
      10001               1 Pending
      10002               2 Paid
      10003               3 Shipped
      10004               4 Unknown

在本示例中,订单状态 1,2, 和 3 都被解码成各自对应的值,而 4 则被解码成默认值。如果您不提供默认值参数,DECODE() 将把 4 解码成 NULL,如下:

SET NULL 'NULL';
SELECT
    t.*,
    DECODE(
        order_status,
        1, 'Pending',
        2, 'Paid',
        3, 'Shipped'
    ) order_status_desc
FROM
    (
        SELECT 10001 order_id, 1 order_status FROM dual
        UNION
        SELECT 10002, 2 FROM dual
        UNION
        SELECT 10003, 3 FROM dual
        UNION
        SELECT 10004, 4 FROM dual
    ) t;

输出:

   ORDER_ID    ORDER_STATUS ORDER_STATUS_DESC
___________ _______________ ____________________
      10001               1 Pending
      10002               2 Paid
      10003               3 Shipped
      10004               4 NULL

NULL 参数

如果任意一个参数为 NULL, DECODE() 将返回 NULL。

SET NULL 'NULL';
SELECT
    DECODE(NULL, NULL, NULL)
FROM dual;

输出:

DECODE(NULL,NULL,NULL)
_________________________
NULL

在本示例中,我们使用 SET NULL 'NULL'; 语句将 NULL 值显示为 'NULL' 字符串。

结论

Oracle DECODE() 是一个内置函数,它根据一个或多个给定的映射关系将给定的参数解码并返回解码后的值。