【问题标题】:SQL - datediff returns hours, but I want to add minutes and seconds in HH:MM:SSSQL - datediff 返回小时,但我想在 HH:MM:SS 中添加分钟和秒
【发布时间】:2018-06-22 11:49:18
【问题描述】:

我正在调整我现有的代码以考虑两个 datetime 值之间经过的分钟和秒数。我目前提取了过去的时间,但最好不是只有几个小时,而是采用 HH:MM:SS 格式,但我似乎找不到任何解决我的问题的文件。

Select 
    convert(datetime, Left(Replace(Create_Date, 'T', ' '), 19)) as CreateDate2,
    case 
       when Resolution_date = 'None' then '1999-01-01 12:00:00'
       when Resolution_date <> 'None' then convert(datetime, left(replace(resolution_date, 'T', ' '), 19))
    end as ResolutionDate2,
    datediff(hour, convert(datetime, left(replace(Create_Date, 'T', ' '), 19)), 
    case 
       when Resolution_date = 'None' then '1999-01-01 12:00:00'
       when Resolution_date <> 'None' then convert(datetime, left(replace(Resolution_date, 'T', ' '), 19)) 
    end) as HoursPassed,
    *
from 
    xyz 
where 
    abc;

更具体地说,这部分来自上面的代码:

datediff(hour, convert(datetime,Left(Replace(Create_Date, 'T', ' '), 19)), 
case 
    when Resolution_date = 'None' then '1999-01-01 12:00:00'
    when Resolution_date <> 'None' then convert(datetime, left(replace(Resolution_date, 'T', ' '), 19)) 
end) as HoursPassed

datetime 列最初采用这种格式:

2017-05-25T15:58:26.000+0000

目前的结果如下所示:

2017-05-23 19:51:59.000  2017-05-24 12:38:17.000        17
2017-05-24 15:10:50.000  2017-05-24 16:31:23.000         1
2017-05-25 15:58:26.000  2017-05-25 16:03:30.000         1

【问题讨论】:

    标签: sql sql-server datediff date-difference


    【解决方案1】:

    您可以将秒数转换为时间。我不太容易按照你的代码逻辑,但是转换很简单:

    select cast(dateadd(second,
                        datediff(second, <starttime>, <enddatime>),
                        0) as time
               )
    

    【讨论】:

    • 这会导致Conversion failed when converting date and/or time from character string. 的错误——这就是我想以某种方式或某种方式使用现有代码的原因,因为它会从导致错误的列中清除“无”。
    • @EricKing 。 . .然后将你的转换表达式插入到这个中。
    • 谢谢@Gordon Linoff - 一开始我没有意识到你的意思,但我能够像这样插入它,它似乎按我们的预期工作:,cast(dateadd(second, datediff(second, convert(datetime,Left(Replace(Create_Date, 'T', ' '), 19)), convert(datetime,Left(Replace(Resolution_Date, 'T', ' '), 19))), 0) as time)
    猜你喜欢
    • 2023-03-14
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多