首页 > 解决方案 > 如何将 DB2 WEEK 函数替换为 Oracle 函数?

问题描述

我正在尝试用 Oracle DB 替换 DB2。

在 DB2 中,有一个 WEEK 函数,它返回一年中的周数。例如:

SELECT week('2021-01-04') FROM sysibm.sysdummy1

然后我得到 2 的返回(因为 DB2 WEEK 函数将星期日视为一周的第一天。)

但是,在 Oracle 中,如果我进行类似的查询,则会得到不同的值。

SELECT to_char(to_date('2021-01-04', 'YYYY-MM-DD'), 'WW') FROM dual;

我得到 1 的值(不是 2,因为 Oracle 将 1 月 1 日视为一周的第一天。)

是否有任何其他转变或不同的功能来替代 DB2 WEEK 功能?

标签: oracledb2

解决方案


Oracle 提供了两个年度数字函数。正如您所发现的,to_char(dt, 'WW')给出一个数字,其中一周从 1 月 1 日开始,每 7 天递增一次。还to_char(dt, 'IW')给出了周一至周日的 ISO 周数;在这种情况下,1 月 1 日是第 53 周,2021-01-04 是 2021 年第 1 周的第一天。

db<>fiddle 上的演示

Oracle 中没有根据星期数增加星期数的函数。您可以编写自己的 PL/SQL 函数来执行此操作。


顺便说一下,Oracle 中一周的第一天是由我们的 NLS 参数决定的。如果我们以(比如说)美国设置运行,周日是第 1 天;如果我们使用英国设置运行,那么星期一是第 1 天。


推荐阅读