sql - 具有固定日期和月份但相对年份的 SQL 日期
问题描述
我在 BusinessObjects WEBI 中创建了一个报告,但我想自定义基础 SQL,以便日期范围中的年份根据查询运行时间而变化,而日期和月份保持不变
这个例子...
WHERE
ACT_ENDDT BETWEEN '01-10-2019 00:00:00' AND '30-09-2020 00:00:00'
...如果我现在运行查询(分别是当年 -1 和当年)是可取的,但如果我要在 2021 年运行此查询,我希望这些年份分别更改为 2020 年和 2021 年,保持日期和月份相同(10/1 和 9/30)。
我搜索了一些资源,如 sqltutorial 和 w3schools,但我在这方面几乎不是新手,无法理解如何使其工作。我还尝试了线程 28707795 中提供的解决方案,如下所示:
ACT_ENDDT BETWEEN DATEFROMPARTS(YEAR(getdate())-1,10,1) AND DATEFROMPARTS(YEAR(getdate()),9,30)
...但最终会收到一条消息,指出 DATEFROMPARTS 是无效的标识符。
有没有办法对日期的一部分进行硬编码并在一年中附加一个修饰符,例如... BETWEEN '01-10-'&[*currentyear* - 1] ...
?
谢谢。
解决方案
您可以像这样使用日期算法:
where act_enddt between trunc(sysdate, 'year') - interval '3' month
and trunc(sysdate, 'year') + interval '9' month - interval '1' day
我想知道半开区间是否也有帮助:
where act_enddt >= trunc(sysdate, 'year') - interval '3' month
and act_enddt < trunc(sysdate, 'year') + interval '9' month
这两个表达式之间的区别在于后者允许日期介于 10 月 30 日 00:00 和当天结束之间。如果您的日期没有时间组件,这不会产生影响(第二个表达式更简洁一些)。
推荐阅读
- r - 将多个文件夹中的多个文件保存为 R 中每个文件夹一个文件
- c# - 如何在 Entity Framework Core 中配置多对多关系
- python - 非结构化点云的区域增长:验证 pcl 失败
- ios - 如何使用具有自动布局的 init(frame:) 实例化自定义 UIView 子类?
- sql - 这个 sql 连接语法有什么问题
- transactions - 关闭事务 CICS
- python-2.7 - 导入 mxnet 时出现非法指令(核心转储)
- css - 如何解决导航滚动问题?
- file - 如何正确复制二进制文件
- java - Spring Boot 应用程序正在使用 Docker 容器的 Redhat Enterprise Linux 服务器上运行,并且希望在 Windows 上访问该应用程序