根据开始日期和结束日期将日期分成几个季度

Split dates into quarters based on start and end date

我想根据给定的开始和结束日期拆分季度。 我有以下 table:

table1

ID start_date end_date No. of Quarters
1 01-01-2017 01-01-2018 4
2 01-04-2017 01-10-2018 7

因此结果 table 应该根据季度数和结束日期拆分日期。 结果 table 应如下所示:

table2

ID Quarterly Start Date
1 01-01-2017
1 01-04-2017
1 01-07-2017
1 01-10-2017
2 01-04-2017
2 01-07-2017
2 01-10-2017
2 01-01-2018
2 01-04-2018
2 01-07-2018
2 01-10-2018

我在 Whosebug 上找到了一个解决方案,其中指出

declare @startDate datetime
declare @endDate datetime

select
    @startDate= ET.start_date,
    @endDate= ET.end_date    
from
    table1

;With cte
As
( Select @startDate date1
Union All
Select DateAdd(Month,3,date1)   From cte where date1 < @endDate 
) select cast(cast( Year(date1)*10000 + MONTH(date1)*100 + 1 as 
varchar(255)) as date) quarterlyDates From cte

由于我是 sql 的新手,因此我无法根据自己的问题对其进行自定义。 有人可以推荐一种方法吗?谢谢!

如果我理解正确,递归 CTE 将如下所示:

with cte as (
      select id, start_date, num_quarters
      from t
      union all
      select id, dateadd(month, 3, start_date), num_quarters - 1
      from cte
      where num_quarters > 1
     )
select *
from cte;

Here 是一个 db<>fiddle.