【问题标题】:SQL convert Seconds to Minutes to HoursSQL将秒转换为分钟到小时
【发布时间】:2013-03-25 13:34:18
【问题描述】:

我有一个 SQL 查询,用于计算与 Voice-over-IP 的对话总数。

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 秒。我计算了调节器 / 60 的方式,但是我怎样才能在 SQL 中做到这一点才能得到准确的结果?!

转发,非常感谢!

【问题讨论】:

  • 为什么不以相同的格式(例如秒)计算时间差,将它们加在一起,然后将该值转换为小时、分钟和秒?
  • 那行得通,没想到 :) 谢谢!
  • @steoleary,您能否将解决方案添加到此问题的末尾?这可能会帮助面临同样问题的其他人,不是吗? :-)

标签: sql date sql-server-2012


【解决方案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

【讨论】:

    【解决方案2】:

    在 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 秒,应该是这样的:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-18
      • 2021-10-29
      • 1970-01-01
      • 2012-06-15
      • 2015-06-02
      • 2011-09-01
      相关资源
      最近更新 更多