加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – SQL Server 2008生成一系列日期时间

发布时间:2020-12-12 06:26:40 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试生成一个具有一系列日期时间的表. 我有指定的开始日期时间和结束日期时间(结束日期时间是序列结束),我添加一个时间间隔?(这可以变化)到开始日期时间(以秒为单位),这给我结束日期时间. 下一个序列使用结束日期时间作为其起始值,并将时间间隔(以秒为
我正在尝试生成一个具有一系列日期时间的表.

我有指定的开始日期时间和结束日期时间(结束日期时间是序列结束),我添加一个时间间隔?(这可以变化)到开始日期时间(以秒为单位),这给我结束日期时间.

下一个序列使用结束日期时间作为其起始值,并将时间间隔(以秒为单位)添加到其中.为了演示我需要的输出.有没有一个快速的方法来创建这样一个表,除了使用大量的插入到命令?,我真的很沮丧

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读