sql中日期时间差异的总和(HH.MM)

Sha*_*ggy 5 sql sql-server sql-server-2008

我有 SQL 表,例如 DateDiff 的格式(hh.mm)

DateDiff   ATM
1.45       121
1.50       121
1.50       121
Run Code Online (Sandbox Code Playgroud)

当我在 ATMSum上使用 DateDiff 时,Group by它会显示如下结果

4.45    121
Run Code Online (Sandbox Code Playgroud)

但实际的日期时差应该是

5.25     121
Run Code Online (Sandbox Code Playgroud)

我们如何在 SQL Query 中实现相同的功能

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
Run Code Online (Sandbox Code Playgroud)

TicketRaisedOn&ClosedOn属于日期时间

数据库是 SQL Server 2008

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

Down Time       ATM
16.95           282
14.46           1811
14.20           52
14.04           936
Run Code Online (Sandbox Code Playgroud)

样本数据

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
Run Code Online (Sandbox Code Playgroud)

msm*_*527 4

在格式化之前进行求和

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
Run Code Online (Sandbox Code Playgroud)

Sql 小提琴:http://sqlfiddle.com/#!3/eca01 /1

  • 这最终可能是 11:6 而不是 11:06 - 您需要向左填充右侧。 (2认同)