2013-03-25 64 views
0

我有一個SQL查詢計算使用IP語音的會話總數。SQL將秒數轉換爲分鐘數到小時數

SELECT COUNT(*) AS 'Aantal gesprekken' 
,FromUri AS 'Medewerker' 
,SUM(DATEDIFF(hour,InviteTime,EndTime)) AS 'Uren' 
,SUM(DATEDIFF(minute,InviteTime,EndTime)) AS 'Minuten' 
,SUM(DATEDIFF(second,InviteTime,EndTime)) AS 'Secondes' 
    FROM [LcsCDR].[dbo].[SessionDetailsView] 
WHERE FromUri LIKE '%robert%' 
AND (CAST([InviteTime] AS date)) BETWEEN '2012-12-27' AND '2013-01-28' 
AND MediaTypes = '16' 
GROUP BY FromUri 

SQL Server 2012提供了以下結果:數字,員工,小時,分鐘和秒鐘。

302 robert 11 518 31316 

但我需要得到這個結果:28小時19分56秒。我計算了reguler/60的方式,但是我怎麼能在SQL中做到這一點,我得到了準確的結果?!

在轉發中,非常感謝!

+2

爲什麼你們不計算在相同的時間差格式(例如秒),將它們加在一起,然後將該值轉換爲小時,分鐘和秒鐘? – steoleary 2013-03-25 13:43:58

+0

這工作,沒有想過那:)謝謝! – BassieBas1987 2013-03-25 14:53:50

+1

@steoleary,請問您可以在此問題的最後添加解決方案嗎?這可能有助於其他面臨同樣問題的人,不是嗎? :-) – Octopus 2013-03-25 19:43:29

回答

0

隨着Steoleary的幫助下,我已經得到了解決

DECLARE @SecondsToConvert int 
SET @SecondsToConvert = (SELECT (SUM(DATEDIFF(hour,InviteTime,EndTime) * 3600) + SUM(DATEDIFF(minute,InviteTime,EndTime) * 60) + SUM(DATEDIFF(second,InviteTime,EndTime) * 1)) AS [Seconds] 
FROM [LcsCDR].[dbo].[SessionDetailsView] 
WHERE FromUri LIKE '%robert%' 
AND (CAST([InviteTime] AS date)) BETWEEN '2012-12-27' AND '2013-01-28' 
AND MediaTypes = '16' 
GROUP BY FromUri) 

-- Declare variables 
DECLARE @Hours int 
DECLARE @Minutes int 
DECLARE @Seconds int 

-- Set the calculations for hour, minute and second 
SET @Hours = @SecondsToConvert/3600 
SET @Minutes = (@SecondsToConvert % 3600)/60 
SET @Seconds = @SecondsToConvert % 60 

SELECT COUNT(*) AS 'Aantal gesprekken' 
,FromUri AS 'Medewerker' 
,@Hours AS 'Uren' ,@Minutes AS 'Minuten' , @Seconds AS 'Seconden' 
FROM [LcsCDR].[dbo].[SessionDetailsView] 
WHERE FromUri LIKE '%robert%' 
AND (CAST([InviteTime] AS date)) BETWEEN '2012-12-27' AND '2013-01-28' 
AND MediaTypes = '16' 
GROUP BY FromUri 

結果,我現在得到準確的時間。

302 robert 28 19 56 

28小時19分56秒,就像它應該是:)

1

嘗試像下面的查詢

SELECT COUNT(*) AS 'Aantal gesprekken',FromUri AS 'Medewerker',     
concat(
    floor(SUM(DATEDIFF(second,InviteTime,EndTime))/3600),":", //Hrs 
    floor(SUM(DATEDIFF(second,InviteTime,EndTime))/60)%60,":", //Mins 
    SUM(DATEDIFF(second,InviteTime,EndTime))%60     //Secs 
) as Total_Hrs 
    FROM [LcsCDR].[dbo].[SessionDetailsView] 
WHERE FromUri LIKE '%robert%' 
AND (CAST([InviteTime] AS date)) BETWEEN '2012-12-27' AND '2013-01-28' 
AND MediaTypes = '16' 
GROUP BY FromUri 
相關問題