sql中日期时间差之和(HH.MM)

sql中日期时间差之和(HH.MM),sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个SQL表,比如DateDiff的格式(hh.mm) 当我在ATM上对DateDiff byGroup by进行Sum时,它将显示如下结果 4.45 121 但是实际的日期时间差应该是 5.25 121 如何在SQL查询中实现同样的功能 Select Sum(Cast(Convert(Varchar(10),DATEDIFF(HOUR,TicketRaisedOn,ClosedOn))+'.'+ Convert(Varchar(10),DATEDIFF(MINUTE,Ti

我有一个SQL表,比如DateDiff的格式(hh.mm)

当我在ATM上对DateDiff by
Group by
进行
Sum
时,它将显示如下结果

4.45    121
但是实际的日期时间差应该是

5.25     121
如何在SQL查询中实现同样的功能

Select Sum(Cast(Convert(Varchar(10),DATEDIFF(HOUR,TicketRaisedOn,ClosedOn))+'.'+
Convert(Varchar(10),DATEDIFF(MINUTE,TicketRaisedOn,ClosedOn)%60) as Numeric(18,2)))[Down Time],ATM 
From Ticket Where Closed=1 And DATEPART(DAYOFYEAR,GETDATE())=DATEPART(DAYOFYEAR,TicketRaisedOn) 
Group BY ATM Order By [Down Time] Desc
TicketRaisedOn
ClosedOn
为日期时间

数据库是SQL Server 2008

上面的查询将这样打印结果(但它是错误的,因为它将以数字而不是日期时间格式求和)

样本数据

Select TicketRaisedOn,ClosedOn,ATM 
From Ticket 
Where ATM=282 And DATEPART(DAYOFYEAR,GETDATE())=DATEPART(DAYOFYEAR,TicketRaisedOn) 
And Closed=1

TicketRaisedOn          ClosedOn                ATM
2012-12-21 01:15:23.793 2012-12-21 15:11:59.240 282
2012-12-21 16:42:29.820 2012-12-21 18:21:30.797 282

你正在做的事情不起作用,因为1.5代表一个半小时,而不是一小时五十分钟

要获得所需的数据,请以小单位(如秒)进行运算,然后将其转换为datetime,然后将datetime转换为最终表示形式。以下是一个例子:

select right(convert(varchar(255),
                     DATEADD(second, DATEDIFF(s, TicketRaisedOn,ClosedOn), cast(0 as datetime)),
                     120),
             8)

在格式化之前进行求和

SELECT
  ATM,
  CONVERT(VARCHAR(10), SUM(DATEDIFF(Minute, TicketRaisedOn, ClosedOn)) / 60)
  + '.' +
  RIGHT('00' + CONVERT(VARCHAR(2), SUM(DATEDIFF(Minute, TicketRaisedOn, ClosedOn)) % 60), 2)
FROM Ticket
GROUP BY ATM

Sql Fiddle:

我怀疑它作为数字(18,2)出现在转换之后和sumIs之前,是查询结果上方的数据吗?如果是这样,那么您可以从表中发布数据吗?字段
TicketRaisedOn、ClosedOn、Closed
?@bonCodigo TicketRaisedOn&ClosedOn的一些数据和表结构是sql中的日期时间数据类型。我正在检索当前的日期记录。关闭位第一行可能有误导性,表中的数据存储为
DATETIME
,所需输出为HH.mm这可能会以11:6而不是11:06结束-您需要将左侧填充到右侧。
select right(convert(varchar(255),
                     DATEADD(second, DATEDIFF(s, TicketRaisedOn,ClosedOn), cast(0 as datetime)),
                     120),
             8)
SELECT
  ATM,
  CONVERT(VARCHAR(10), SUM(DATEDIFF(Minute, TicketRaisedOn, ClosedOn)) / 60)
  + '.' +
  RIGHT('00' + CONVERT(VARCHAR(2), SUM(DATEDIFF(Minute, TicketRaisedOn, ClosedOn)) % 60), 2)
FROM Ticket
GROUP BY ATM