我有查询,它给出了代理商多年来的总通话时间总和
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',但这应该始终小于或等于第一个结果
我用来计算总通话时间的功能是否正确?
答案 0 :(得分:1)
我怀疑你的第一个结果大于1天,但是使用TIME
会被截断。您可以使用0
来获取总分钟数,而不是向TIME
添加秒数并转换为DATEDIFF()
:
SELECT DATEDIFF(MINUTE,0,TalkTime)
理想情况下,您需要使用开始/结束时间而不是0
,因为如果您需要过于精确并尝试从0
开始,您将遇到溢出。如果它始终相对于当天的开始,您可以使用:
SELECT DATEDIFF(SECOND,CAST(TalkTime AS DATE),TalkTime)
同样,您只需删除已有的TIME
转换。