带有开始日期,开启日期,关闭日期和日期的SQL定期日期列表频率

时间:2018-06-18 18:28:50

标签: sql sql-server tsql common-table-expression

在给定以下数据的情况下填写表(SQL Server 2016):开始日期(日期时间),日期(int),关闭日期(int),重复间隔的频率(int)

数据 - 1/1/2018,开启= 7,关闭= 5,频率= 10

输出:

Date
1/1/2018
1/2/2018
1/3/2018
1/4/2018
1/5/2018
1/6/2018
1/7/2018
**skips 5**
1/13/2018
1/14/2018
1/15/2018
1/16/2018
1/17/2018
1/18/2018
1/19/2018
**skips 5** et. creating 7 and skipping 5 x 10

实现这一点可以使用循环来完成,我希望有一个方便的CTE示例或其他选项。

1 个答案:

答案 0 :(得分:2)

您可以使用下面的查询。此解决方案基于Tally / Numbers表方法。 要了解详情,请通读 Jeff Moden article

See live demo

declare @sd date= '01/01/2018', @on int= 7, @off int= 5, @freq int= 10;

select d
from
(
    select 
        top (@freq* (@on+@off))
        d=dateadd(d,row_number() over( order by (select null))-1 ,@sd),
        flag=case when row_number() over( order by (select null))%(@on+@off) between 1 and @on then 1 else 0 end
        from sys.objects o1
        cross join sys.objects o2
)t
where flag=1