2014-09-02 79 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轉換。

相關問題