Tsql 计算返回日期时间结果的日期之间的差异

Tsql 计算返回日期时间结果的日期之间的差异,tsql,Tsql,我需要以datetime格式获取两个日期之间的差异:HH:mm:ss。是否可以使用一些T-SQL函数?我总是使用DATEDIFF,但它只返回int,只需将它们减去,得到一个datetime值,然后按照您想要的格式格式化 e、 g 用减法的结果替换getdate()。只需将它们减去即可获得日期时间值,然后按照您的意愿设置格式 declare @date1 datetime = '2012-08-04 12:10' declare @date2 datetime = '2012-08-04 13:1

我需要以datetime格式获取两个日期之间的差异:
HH:mm:ss
。是否可以使用一些T-SQL函数?我总是使用
DATEDIFF
,但它只返回
int

,只需将它们减去,得到一个datetime值,然后按照您想要的格式格式化

e、 g


用减法的结果替换
getdate()

只需将它们减去即可获得日期时间值,然后按照您的意愿设置格式

declare @date1 datetime = '2012-08-04 12:10'
declare @date2 datetime = '2012-08-04 13:10'

select cast(@date2 - @date1 as time(0))
e、 g


您将用减法的结果替换
getdate()

如果经过的时间超过24小时,则结果将具有误导性(“mod”为24:00:00)。此代码段将包括天数作为时间前缀。我已经包括了向前和向后间隔的计算

declare @date1 datetime = '2012-08-04 12:10'
declare @date2 datetime = '2012-08-04 13:10'

select cast(@date2 - @date1 as time(0))
declare @date1 datetime,@date2 datetime
set @date1 = '2013-01-02 12:01:02' 
set @date2 = '2013-01-03 22:00:00' 
select 

   -- forward interval
   case when datediff(dd,@date1,@date2) != 0 then
    cast(datediff(dd,@date1,@date2) as varchar)
    + 'd ' + convert(varchar(100), @date1-@date2, 108)
   else
      convert(varchar(100), @date1-@date2, 108)
   end as ElapsedT1,

   -- backward interval
   case when datediff(dd,@date2,@date1) != 0 then
    cast(datediff(dd,@date2,@date1) as varchar)
    + 'd ' + convert(varchar(100), @date2-@date1, 108)
   else
      convert(varchar(100), @date2-@date1, 108)
   end as ElapsedT2

ElapsedT1     ElapsedT2
1d 14:01:02   -1d 09:58:58

如果经过的时间超过24小时,结果将具有误导性(“mod”为24:00:00)。此代码段将包括天数作为时间前缀。我已经包括了向前和向后间隔的计算

declare @date1 datetime,@date2 datetime
set @date1 = '2013-01-02 12:01:02' 
set @date2 = '2013-01-03 22:00:00' 
select 

   -- forward interval
   case when datediff(dd,@date1,@date2) != 0 then
    cast(datediff(dd,@date1,@date2) as varchar)
    + 'd ' + convert(varchar(100), @date1-@date2, 108)
   else
      convert(varchar(100), @date1-@date2, 108)
   end as ElapsedT1,

   -- backward interval
   case when datediff(dd,@date2,@date1) != 0 then
    cast(datediff(dd,@date2,@date1) as varchar)
    + 'd ' + convert(varchar(100), @date2-@date1, 108)
   else
      convert(varchar(100), @date2-@date1, 108)
   end as ElapsedT2

ElapsedT1     ElapsedT2
1d 14:01:02   -1d 09:58:58