【问题标题】:How to Sum (Time(n)) in Sql Server?如何在 SQL Server 中求和(时间(n))?
【发布时间】:2014-05-27 11:56:44
【问题描述】:

如何使用 time(n) 运算符的总和,以便我可以计算总时间但 Sql server 说不能添加 Time(n) 列

我有一个包含两个日期差异的铸造列,并被我铸造为时间(n)。现在我想添加这些列来获取我总共使用了多少时间我申请了多少小时分钟和秒

select Sum(cast ((date1-date2) as Time(0))) from ABC_tbl

其中 date1 是到达时间,而 date2 是 Date 格式的开始时间,我想计算所有时间的总和

【问题讨论】:

  • 您能否发布导致错误的 SQL。
  • 您是说您有一列 TIME 类型的列,并且您想对各行求和以给出总持续时间?

标签: sql sql-server


【解决方案1】:

在求和之前将时间转换为整数值(例如,秒):

SELECT SUM(
        datediff(second, '00:00:00', [TimeCol])
    )
FROM
    ...

将 [TimeCol] 替换为 Time(n) 列的名称。这为您提供了以秒为单位的总时间,然后您可以轻松地将其转换为分钟、小时等...

【讨论】:

    【解决方案2】:

    希望这个例子对你有所帮助。

    DECLARE @A TABLE (SD TIME(0),ED TIME(0)) 
    
    INSERT INTO @A VALUES 
    ('09:01:09','17:59:09'),
    ('09:08:09','16:10:09'),
    ('08:55:05','18:00:00')
    
    SELECT  SUM(DATEDIFF(MINUTE,SD,ED)) SUM_IN_MINUTES,
            SUM(DATEDIFF(HOUR,SD,ED)) SUM_IN_HOURS
    FROM    @A
    

    结果:

    SUM_IN_MINUTES  | SUM_IN_HOURS
    ---------------------------------------
    1505            |       25
    

    【讨论】:

      【解决方案3】:
      select Sum(DATEDIFF(Minute,date1,date2)) AS TIME from ABC_tbl
      

      您必须使用 DATEDIFF 函数计算日期差异,然后使用 SUM 函数计算您的时间总和。 您可以将 Minute 更改为 Second-Hour-month 等。

      【讨论】:

        【解决方案4】:

        试试这个:

        DECLARE 
            @MidnightTime TIME = '00:00:00.0000000',
            @MidnightDateTime DATETIME2 = '0001-01-01 00:00:00.0000000';
        
        SELECT  SumOfTime = DATEADD(SECOND, SUM ( DATEDIFF(SECOND, @MidnightTime, x.Col1) ), @MidnightDateTime)
        FROM (VALUES 
            (1, CONVERT(TIME, '10:10:10.0000001')),
            (2, CONVERT(TIME, '00:00:05.0000002')),
            (3, CONVERT(TIME, '23:59:59.0000003'))
        ) x(ID, Col1)
        /*
        SumOfTime
        ---------------------------
        0001-01-02 10:10:14.0000000 = 1 day (!), 10 hours, 10 minutes, 14 seconds
        */
        

        注意:您可以使用另一个精度来代替SECONDMINUTE, HOUR or ... NANOSECOND (see section Arguments > datepart)。使用更高的精度可能会导致Arithmetic overflow 错误(使用CONVERT(BIGINT|NUMERIC(...,0), ...)

        注意 #2:因为精度是 SECOND,所以结果 (SumOfTime) 有 0000000 纳秒。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-20
          • 2012-04-04
          • 2017-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-26
          相关资源
          最近更新 更多