oracle - 如何将 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 功能?
解决方案
Oracle 提供了两个年度数字函数。正如您所发现的,to_char(dt, 'WW')
给出一个数字,其中一周从 1 月 1 日开始,每 7 天递增一次。还to_char(dt, 'IW')
给出了周一至周日的 ISO 周数;在这种情况下,1 月 1 日是第 53 周,2021-01-04 是 2021 年第 1 周的第一天。
Oracle 中没有根据星期数增加星期数的函数。您可以编写自己的 PL/SQL 函数来执行此操作。
顺便说一下,Oracle 中一周的第一天是由我们的 NLS 参数决定的。如果我们以(比如说)美国设置运行,周日是第 1 天;如果我们使用英国设置运行,那么星期一是第 1 天。
推荐阅读
- ios - 在 UITableview 内的自动调整大小的标签上设置非常长的文本会破坏 NSLayoutConstraint
- node.js - 为什么 node.js 对话流示例代码将输出上下文复制到输入上下文?
- html - 在容器中定位内容
- java - 是否可以将自己的密钥放入 AndroidKeyStore?
- r - R代码-随机森林回归-变量重要性分析-显着性检验
- reactjs - React/Material-UI:如何将 FloatingActionButton 附加到 AppBar?
- excel - VBA 宏或函数可以通过 Windows 命令调用或执行吗?
- arrays - 检测数组中重复值的最快方法?(VBA)
- vhdl - 如何使输入数据大小可变的 CRC 生成器函数
- datetime - Dart / Flutter 默认日期格式