我正在尝试生成一个具有一系列日期时间的表.
我有指定的开始日期时间和结束日期时间(结束日期时间是序列结束),我添加一个时间间隔〜(这可以变化)到开始日期时间(以秒为单位),这给我结束日期时间.
下一个序列使用结束日期时间作为其起始值,并将时间间隔(以秒为单位)添加到其中.为了演示我需要的输出.有没有一个快速的方法来创建这样一个表,除了使用大量的插入到命令?,我真的很沮丧
StartTime Endtime Duration 2011-07-20 11:00:33 2011-07-20 11:09:47 554 2011-07-20 11:09:47 2011-07-20 11:19:01 554 declare @StartTime datetime = '2011-07-20 11:00:33',@EndTime datetime = '2011-07-20 15:37:34' @Interval int = 554 -- this can be changed. insert into tmp_IRange values('2011-07-20 11:00:33',DATEADD(SECONDS,@Duration,2011-07-20 11:00:33))
这变得非常繁琐..特别是当结束日期时间是2011-07-20 15:37:34
有很多insert语句使:(
解决方法
使用递归CTE
declare @StartTime datetime = '2011-07-20 11:00:33',@EndTime datetime = '2011-07-20 15:37:34',@Interval int = 554 -- this can be changed. ;WITH cSequence AS ( SELECT @StartTime AS StartRange,DATEADD(SECOND,@Interval,@StartTime) AS EndRange UNION ALL SELECT EndRange,EndRange) FROM cSequence WHERE DATEADD(SECOND,EndRange) < @EndTime ) /* insert into tmp_IRange */ SELECT * FROM cSequence OPTION (MAXRECURSION 0);