2014-09-02 29 views
0

我有查询其给出的总通话时间总和代理所有年如何总结时间数据类型在SQL Server

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

一些示例数据可能会有帮助。可能是因为你的第一个结果比一天大,但你没有看到它,因为只处理'TIME'。你可能应该采取一些你关心的最低增量。 – 2014-09-02 15:55:00

+1

你可以使用datediff(s,startTime,endTime)来获得你的开始和结束之间的秒数吗? – Kritner 2014-09-02 15:55:45

回答

1

我怀疑你的第一个结果是大于1天,但是这是通过使用TIME截断。而不是添加秒,0并转换为TIME的,你可以使用DATEDIFF()获得总分钟数:

SELECT DATEDIFF(MINUTE,0,TalkTime) 

理想情况下,你就会有一个开始/结束时间,而不是使用0,因为你会碰到一个如果您需要过于精确,请尝试从0开始溢出。如果它总是相对于一天的开始,您可以使用:

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

同样,你可以简单地从你已经删除TIME转换。

相关问题