【发布时间】:2021-05-22 09:58:10
【问题描述】:
我正在尝试转换 Microsoft SQL Server 中 datatime 和 current_timestamp 列之间的日期差异
下面是我得到的编码和输出示例:
代码
select top 1
[Date & Time] = '2021-02-18 20:45:49.0000000'
,convert(varchar,DATEDIFF(dd,[Date & Time],CURRENT_TIMESTAMP)) + 'Days'
+ convert(varchar,DATEDIFF(HH,[Date & Time],CURRENT_TIMESTAMP) % 24) + 'Hours'
+ convert(varchar,DATEDIFF(MI,[Date & Time],CURRENT_TIMESTAMP) % 60) + 'Mins' as [Waiting Time]
from Invoices
电流输出
Date & Time | Waiting Time
2021-02-18 20:45:49.0000000 | 1Days15Hours0Mins
预期输出
Date & Time | Waiting Time
2021-02-18 20:45:49.0000000 | 0Days15Hours0Mins
谁能告诉我为什么我得到的是1 days 而不是0 days?最终目标是将当前时间戳与发票日期和时间之间的日期差转换为天小时和分钟格式。
【问题讨论】:
-
DATEDIFF统计一天改到第二天的次数。在您的示例中,第一天 = 18,第二天 = 19,所以DATEDIFF认为这是一天的差异。为了得到你需要的东西,你必须计算小时(或分钟、秒)的差异并将其重新计算为 24 小时 -
@HoneyBadger - 感谢您的回复,设法使用以下编码:
,convert(varchar(10),(DATEDIFF(s,[Date & Time],CURRENT_TIMESTAMP))/86400) + 'Days ' + convert(varchar(10),((DATEDIFF(s,[Date & Time],CURRENT_TIMESTAMP))% 86400) /24) + 'Hours ' + convert(varchar(10),(((DATEDIFF(s,[Date & Time],CURRENT_TIMESTAMP)) % 86400) %3600)/60) + 'Mins' -
似乎是一个很好的解决方案。随意回答您自己的问题,它可能会在将来对其他人有所帮助
标签: sql-server casting timestamp