【问题标题】:SQL Server How to get Difference between two dates HH:MM:SS [duplicate]SQL Server如何获取两个日期之间的差异HH:MM:SS [重复]
【发布时间】:2016-10-20 14:33:31
【问题描述】:

我需要将两个日期之间的差异作为 HH:MM:SS 格式我试过了

Select UserId,StartTime,EndTime,   DATEDIFF(HOUR,   StartTime, EndTime) AS  Hours,
 DATEDIFF(MINUTE, StartTime, EndTime) AS  Minutes,
  DATEDIFF(SECOND, StartTime, EndTime) AS  Seconds 

from Responses 

但它效果不佳,因为它分别计算小时、分钟和秒。 例如:如果分钟大于 60 分钟,它不会改变小时

1:70:00 而不是 2:00:00

我需要当大于 60 分钟的分钟增加一个新的小时,当大于 60 秒的秒增加一个新的分钟

谢谢,

【问题讨论】:

    标签: sql-server database date datetime


    【解决方案1】:
    declare @D1 datetime = '1jan2016 12:02:55'
    declare @D2 datetime = '5jan2016 04:11:35'
    Select @D2 - @d1, 
        Format(datediff(second, 0, @D2 - @d1)/3600, '0') + ':' +
        Format(datediff(second, 0, @D2 - @d1)%3600 / 60, '00') + ':' +
        Format(datediff(second, 0, @D2 - @d1)%3600 % 60, '00')
    

    【讨论】:

    • 它正在工作,非常感谢,你能告诉我如何避免使用 Time DataType 而不是字符串的 t-sql 吗?谢谢
    【解决方案2】:

    你可以试试这个方法:

    SELECT Userid, StartTime, EndTime,  convert(time(0),StartTime - EndTime) AS [Time in hh:mm:ss]
    FROM Responses
    

    【讨论】:

    • 这在时差小于 24 小时时有效
    【解决方案3】:

    你可以使用 cast 函数来代替 DATEDIFF,类似于

    声明@StartDate 日期时间,@EndDate 日期时间

    选择@StartDate = '10/01/2012 08:40:18.000',@EndDate='10/04/2012 09:52:48.000'

    选择 CAST((@EndDate-@StartDate) as time(0)) '[hh:mm:ss]'

    `

    【讨论】:

    • 这也仅适用于差异的时间部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多