【问题标题】:Date difference formatted in Days Hours Minutes Seconds日时分秒格式的日期差异
【发布时间】:2014-05-13 11:55:29
【问题描述】:

有没有办法获得两个日期之间的剩余时间(差异)?

例如,我想让它返回 6 天 10 小时 3 分 37 秒。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    以下选择应该可以工作:

    DECLARE @x int, 
            @dt1 smalldatetime = '1996-03-25 03:24:16', 
            @dt2 smalldatetime = getdate()
    
    SET @x = datediff (s, @dt1, @dt2)
    
    
    SELECT convert(varchar, @x / (60 * 60 * 24)) + ':'
    + convert(varchar, dateadd(s, @x, convert(datetime2, '0001-01-01')), 108)
    

    另一个更接近您所需输出的选项是:

    DECLARE @start DATETIME ,
        @end DATETIME,
        @x INT
    
    SELECT  @start = '2009-01-01' ,
            @end = DATEADD(ss, 5, DATEADD(mi, 52, DATEADD(hh, 18, DATEADD(dd, 2, @start)))),
            @x = DATEDIFF(s, @start, @end)
    
    SELECT  CONVERT(VARCHAR, DATEDIFF(dd, @start, @end)) + ' Days '
            + CONVERT(VARCHAR, DATEDIFF(hh, @start, @end) % 24) + ' Hours '
            + CONVERT(VARCHAR, DATEDIFF(mi, @start, @end) % 60) + ' Minutes '
            + CONVERT(VARCHAR, DATEPART(ss, DATEADD(s, @x, CONVERT(DATETIME2, '0001-01-01')))) + ' Seconds'
    

    更新答案 (04/12/2018): 说明影响较高订单日期部分的较低订单日期部分的差异(即 23 小时差异现在将导致 0 天 23 小时)!

    DECLARE @start DATETIME = '2018-04-12 15:53:33' ,
    @end DATETIME = '2018-04-13 14:54:32' ,
    @x INT;
    
    SET @x = DATEDIFF(s, @start, @end);
    
    SELECT  CONVERT(VARCHAR(10), ( @x / 86400 )) + ' Days '
            + CONVERT(VARCHAR(10), ( ( @x % 86400 ) / 3600 )) + ' Hours '
            + CONVERT(VARCHAR(10), ( ( ( @x % 86400 ) % 3600 ) / 60 ))
            + ' Minutes ' + CONVERT(VARCHAR(10), ( ( ( @x % 86400 ) % 3600 ) % 60 ))
            + ' Seconds';
    

    【讨论】:

    • 谢谢。奇迹般有效!将结束更改为 getDate()
    • 当开始小时/分钟/秒小于结束时,第二个选项是错误的。这是 23 小时差异的示例: select CONVERT(VARCHAR, DATEDIFF(dd, '2018-04-12 15:54:32', '2018-04-13 14:54:32')) + 'Days' + CONVERT (VARCHAR, DATEDIFF(hh, '2018-04-12 15:54:32', '2018-04-13 14:54:32') % 24) + 'Hours' 但查询返回 1 天 23 小时,不只是 23 小时。
    • @TimofeyGMorozov 已更新答案。不错的收获!
    【解决方案2】:

    MS SQL DD:HH:MM:SS 中显示表中所有记录的持续时间的最佳方式

    declare @StartDate datetime, @EndDate datetime
    
    select @StartDate = '10/01/2012 23:40:18.000',@EndDate='10/04/2012 04:10:48.000'
    
    select  convert(varchar(5),DateDiff(s, @startDate, @EndDate)/86400)+':' +convert(varchar(5),DateDiff(s, @startDate,@EndDate)%86400/3600)+':'
    +convert(varchar(5),DateDiff(s, @startDate,@EndDate)%3600/60)+':'
    
    +convert(varchar(5),(DateDiff(s, @startDate, @EndDate)%60)) as [hh:mm:ss] 
    

    【讨论】:

      【解决方案3】:

      尝试使用datediff 函数,以秒为单位获得差异。然后除以得到天数等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-13
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多