Sql server 如何在SQL Server中减去两个日期时间值并以HH:MM:SS格式获得输出?

Sql server 如何在SQL Server中减去两个日期时间值并以HH:MM:SS格式获得输出?,sql-server,function,datetime,formatting,azure-sql-managed-instance,Sql Server,Function,Datetime,Formatting,Azure Sql Managed Instance,我想减去两个datetime值,然后以HH:MM:SS格式输出 如果差异超过一天,则需要将天数计数添加到小时数中 我试图对datediff输出进行压缩,如下所述 select concat(datediff(hh, '2019-07-16 04:45:03.000','2019-07-17 19:38:13.000') ,':', (datediff(mi, '2019-07-16 04:45:03.000','2019-07-17 19:38:13.000') -(datediff(hh, '

我想减去两个datetime值,然后以HH:MM:SS格式输出

如果差异超过一天,则需要将天数计数添加到小时数中

我试图对datediff输出进行压缩,如下所述

select concat(datediff(hh, '2019-07-16 04:45:03.000','2019-07-17 19:38:13.000')
,':',
(datediff(mi, '2019-07-16 04:45:03.000','2019-07-17 19:38:13.000') -(datediff(hh, '2019-07-16 04:45:03.000','2019-07-17 19:38:13.000')*60))
,':',
(datediff(ss, '2019-07-16 04:45:03.000','2019-07-17 19:38:13.000')-(datediff(mi, '2019-07-16 04:45:03.000','2019-07-17 19:38:13.000')*60)))
预期输出:
38:53:10

实际输出:
39:-7:10

你能告诉我我犯了什么错误吗?是否有更好的方法获得所需的输出?

类似于:

with q as
(
  select datediff(SECOND, '2019-07-16 04:45:03.000','2019-07-17 19:38:13.000') secs
), hms as
(
  select secs/60/60 as hours,  (secs/60) % 60 as minutes , secs % 60 seconds
  from q
)
select concat(format(hours,'00'),':',format(minutes,'00'),':',format(seconds,'00') ) hms
from hms 
返回

38:53:10

time
不支持超过24小时的值。最好在几秒钟内返回差异,让显示层担心格式或类似问题。显示层使用什么应用程序?这就是你应该在这里标注的内容。这似乎是这个问题的重复:@Larnu哦,好的,谢谢。David Browne提供的答案很好。是的,但该解决方案@Venkat的问题是它返回一个
varchar
,因此,在
'100:00:00'
之后使用的“time”
'11:00:01'
。哦,它使用
格式,这(老实说),是一个非常糟糕的执行者。Browne非常感谢你,这个很好用。我有几个问题要问,你能澄清一下吗。?1)我发布的查询有什么问题?2.“格式(小时,'00')”有什么作用?小心使用
格式
;它表现得很糟糕。你最好避免使用它。如果性能很关键,像
right(concat('00',hours),2)
这样的速度会更快。我认为@DavidBrowne Microsoft会更好。为什么我必须在这里使用格式,直接从hms在查询中输入小时、分钟和秒会有什么问题。