五月 19, 2023
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()
函数很适合用来翻译一些内容,比如,将状态值翻译为状态说明。
让我们创建一个包含了订单状态的数据表:
CREATE TABLE orders (
order_id number,
order_status number
);
INSERT INTO orders (order_id, order_status) VALUES
(10001, 1),
(10002, 2),
(10003, 3),
(10004, 4);
下面的语句将订单状态翻译为状态说明:
SELECT
*,
DECODE(
order_status,
1, 'Pending',
2, 'Paid',
3, 'Shipped',
'Unknown'
) order_status_desc
FROM orders;
输出:
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
,如下:
SELECT
*,
DECODE(
order_status,
1, 'Pending',
2, 'Paid',
3, 'Shipped'
) order_status_desc
FROM orders;
输出:
ORDER_ID ORDER_STATUS ORDER_STATUS_DESC
___________ _______________ ____________________
10001 1 Pending
10002 2 Paid
10003 3 Shipped
10004 4
PostgreSQL CASE 示例
我们可以使用 PostgreSQL 的 CASE 表达式,实现和 Oracle DECODE 函数类似的功能。下面的语句将订单状态翻译为状态说明:
SELECT
*,
CASE order_status
WHEN 1 THEN 'Pending'
WHEN 2 THEN 'Paid'
WHEN 3 THEN 'Shipped'
ELSE 'Unknown'
END AS order_status_desc
FROM orders;
在上面示例中,订单状态 1
,2
, 和 3
都被解码成各自对应的值,而 4
则被解码成默认值。如果您不提供默认值参数,CASE
表达式将把 4
解码成 NULL
,如下:
SELECT
*,
CASE order_status
WHEN 1 THEN 'Pending'
WHEN 2 THEN 'Paid'
WHEN 3 THEN 'Shipped'
END AS order_status_desc
FROM orders;