如何解决格式化DATEDIFF输出后的持续时间错误附加日
我需要获取两个时间点之间的持续时间,并且需要使用“ DD HH:mm:ss”格式。
因此,我使用了以下行:
FORMAT(CAST(CONVERT(varchar(20),DATEADD(SECOND,DATEDIFF(SECOND,FirstDate,LastDate),0),120) AS datetime),'dd HH:mm:ss')
但是它有一个错误。它返回额外的一天。因此,当两个日期都在同一天时,它将在当天返回“ 01”,而不是“ 00”。
我希望有人能告诉我我哪里错了。
这是我的输出:
FirstDate LastDate Duration
2020-09-24 08:20:42.843 2020-09-24 11:16:28.217 01 02:55:46
2020-09-24 08:20:42.437 2020-09-24 11:16:27.843 01 02:55:45
2020-09-24 08:20:41.373 2020-09-24 11:16:26.640 01 02:55:45
解决方法
dateadd + datediff方法返回一个完整为1900-01-01 02:55:46.000的日期时间
因此,通过使用dd格式,您可以从中获得一天,实际上是01
有很多方法可以完成您想要的事情,但这是与您的方法类似的一种方法:
CONVERT(char(2),FORMAT(DATEDIFF(dd,FirstDate,LastDate),'00')) + ' ' +
CONVERT(varchar(8),CONVERT(time,LastDate - FirstDate))
(假设您使用的是SQL Server 2012 +)
,日期错误,因为它是一个月中的某一天。您可以分别设置时间和日期部分:
select concat(v.secs / (60*60*24),' ',convert(time(0),dateadd(second,v.secs % (60*60*24),0))
)
from (values (convert(datetime,'2020-09-24 08:20:42.843'),convert(datetime,'2020-09-24 11:16:28.217'))) t(firstdate,lastdate) cross apply
(values (DATEDIFF(SECOND,t.FirstDate,t.LastDate))) v(secs);
Here是db 小提琴。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。