如何在sql server中总结时间数据类型

时间:2014-09-02 15:50:45

标签: sql sql-server sql-server-2008

我有查询,它给出了代理商多年来的总通话时间总和

SELECT 
CONVERT(TIME, DATEADD(s, SUM(( DATEPART(hh, TalkTime) * 3600 ) + ( DATEPART(mi, TalkTime) * 60 ) + DATEPART(ss, TalkTime)), 0))
  FROM [CRMIntegration].[dbo].[Five9CallLog]
  where AGENT_NAME = 'XYZ'

给了我'00:37:01.0000000'

但是当我使用以下查询总结今年的总通话时间

SELECT 
CONVERT(TIME, DATEADD(s, SUM(( DATEPART(hh, TalkTime) * 3600 ) + ( DATEPART(mi, TalkTime) * 60 ) + DATEPART(ss, TalkTime)), 0))
  FROM [CRMIntegration].[dbo].[Five9CallLog]
  where AGENT_NAME = 'XYZ'
  and DateOfcall between 
  DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) and dateadd(day,datediff(day,1,GETDATE()),0)

查询结果是'23:34:38.0000000',但这应该始终小于或等于第一个结果

我用来计算总通话时间的功能是否正确?

1 个答案:

答案 0 :(得分:1)

我怀疑你的第一个结果大于1天,但是使用TIME会被截断。您可以使用0来获取总分钟数,而不是向TIME添加秒数并转换为DATEDIFF()

SELECT DATEDIFF(MINUTE,0,TalkTime)

理想情况下,您需要使用开始/结束时间而不是0,因为如果您需要过于精确并尝试从0开始,您将遇到溢出。如果它始终相对于当天的开始,您可以使用:

SELECT DATEDIFF(SECOND,CAST(TalkTime AS DATE),TalkTime)

同样,您只需删除已有的TIME转换。