sql - 每 6 个月动态拆分日期范围。开始日期可以是任何东西,但加起来是月份范围
问题描述
请帮助将日期范围划分为每 6 个月,开始日期可以是任何东西,但使用开始日期,我们只需要添加 09-30,第二天 10 月 1 日应该成为开始日期。我尝试使用递归 cte 但仍然没有得到确切的结果
startdate enddate
06-22-2018 09-30-2022
输出
startdate enddate
06-22-2018 09-30-2018
10-01-2018 03-31-2019
04-01-2019 09-30-2019
10-01-2019 03-31-2020
04-01-2020 09-30-2020
解决方案
您可以使用递归 CTE:
with cte as (
select startdate, eomonth(datefromparts(year(startdate), 9, 1)) as enddate, enddate as orig_enddate
from t
union all
select dateadd(day, 1, enddate), eomonth(dateadd(month, 5, dateadd(day, 1, enddate))) as enddate, orig_enddate
from cte
where enddate < orig_enddate
)
select *
from cte;
这是一个 db<>fiddle。
目前尚不清楚您希望第一行是哪一年。根据您的问题,这使用开始日期当年的 9 月 30 日。
如果您需要超过 100 个日期,请添加option max(recursion 0)
.
推荐阅读
- javascript - 尝试使用它下载大文件时,Node.js 应用程序崩溃
- node.js - 快速授权中间件;当角色不够时
- android - 谁能告诉我那行代码有什么问题
- c++ - 如何在 Visual Studio Code 中放置自定义输入以进行调试
- spring-security - Spring security 5 和 OAuth2 - Success Handler 未被调用,登录后进入无限循环
- javascript - 使用 $.ajax post 将数据发送到 node.js 服务器不起作用
- azure - 在家中的 Azure ssh 连接
- ios - 具有结构类型的可选委托 - swift
- selenium - Unable to open href link in selenium python
- mysql - 在更新用例存储过程中使用变量