计算日期时间的总和HH:MM:SS在SQL(Calculate Sum of Datetime in

2019-10-29 07:36发布

我想要计算总和HH:MM:SS

首先我正在计算日期时间差在HH:MM:SS(效果很好)

Select  * 
Into    #_TicketType 
From    (    
        Select  *,
                convert(varchar(5), DateDiff(s, [Start Date] , [End Date] )/3600)
              + ':'
              + convert(varchar(5),DateDiff(s, [Start Date] , [End Date])%3600/60)
              + ':'
              + convert(varchar(5),(DateDiff(s,[Start Date] , [End Date])%60)) as [Ticket Type Time]
            ,
                convert(varchar(5),DateDiff(s, [Ticket Open Time]  , [Ticket Closed Time] )/3600)
              + ':'
              + convert(varchar(5),DateDiff(s,[Ticket Open Time]  , [Ticket Closed Time])%3600/60)
              + ':'
              + convert(varchar(5),(DateDiff(s,[Ticket Open Time]  , [Ticket Closed Time])%60))[Total Call Time]
        FROM CTE
        )_A

[Start Date] , [End Date],[Ticket Open Time] , [Ticket Closed Time]类型的DateTime

另外我想计算HH它总和:MM:SS

我的查询: -

Select Distinct ATM,
    CAST (
          (SUM (datepart(hh, convert (varchar, [Ticket Type Time], 108)))
        + (sum (datepart(mi, convert (varchar, [Ticket Type Time], 108)))/60) ) 
    AS VARCHAR(2))
    + ':'
    + CAST (
          sum( datepart(mi, convert (varchar, [Ticket Type Time], 108))) 
        - 60 
        * (sum(datepart(mi, convert (varchar, [Ticket Type Time], 108)))/60)
    as VARCHAR(2))
    + ':' 
    + CAST (
          sum( datepart(ss, convert (varchar, [Ticket Type Time], 108))) 
        - 60 
        * (sum( datepart(SS, convert (varchar, [Ticket Type Time], 108)))/60)
    as VARCHAR(2))
From #_TicketType Group By ATM

它给我的错误

**Msg 241, Level 16, State 1, Line 67
Conversion failed when converting date and/or time from character string.**

DATEBASE SQL SERVER 2008

Answer 1:

我觉得你的意思转换时间(或者,如果您的SQL Server版本不支持它的日期时间),而不是VARCHAR。

但是,这是一个非常糟糕的方式做到这一点。 25:01:01不会是一个有效的日期时间。 你应该总结秒(作为另一个答案的建议),然后只要你喜欢在最后格式化结果。

所以,在你的第一个查询,包括另一列是在几秒钟时间:

, DateDiff(s,[Start Date] , [End Date]) as [Ticket Type Seconds]

然后在第二个查询,只需格式化SUM([门票类别秒]),也许是这样的:

STR(SUM([Ticket Type Seconds])/3600) 
+ RIGHT(CONVERT(char(8),DATEADD(s,SUM([Ticket Type Seconds]),0),108),6)

这使你的时间(可以大于24),与串接“:MM:SS”当你转换秒(19000101 00:00:00添加到0日期),你得到的日期时间的一部分约会时间。



Answer 2:

这里有两个相关的问题。

  1. SQL Server不支持间隔数据类型。
  2. “8点”和“8时间”通常被写如出一辙 - “8:00:00” - 但他们的意思是完全不同的事情。

您不能添加类型的值“日期时间”。 是否“8点加3点”有意义吗? 不。

现在,“8小时加3小时”是有道理的,但时间是DateTime类型没有。 在标准SQL中,它们是区间型的。 在不支持间隔数据类型的系统 - 的SQL Server就是其中之一 - 你必须计算在已知的单位不一致的,像小时,分钟或秒。 您可以轻松地总结这些类型的值。

  • 计算在几秒或几分钟的差异。
  • 请查询这些值。
  • 总结了几秒钟或几分钟。
  • 治疗转换为一个不错的,友好的显示格式(HH:MM:SS)作为一个单独的步骤,或者让前端应用程序代码做到这一点。

这应该消除一些或所有的呼叫转换(),甚至可能跑得更快。



文章来源: Calculate Sum of Datetime in HH:MM:SS in sql