【问题标题】:How to SUM hours, minutes and seconds?如何求和小时,分钟和秒?
【发布时间】:2012-09-19 12:47:23
【问题描述】:

我需要使用 Sql Server 2008 对小时、分钟和秒求和

该字段仅包含时间值。

输入

ID       HORA_S  
--  ----------------------
1   1899-12-30 18:22:50.000
2   1899-12-30 18:22:50.000
3   1899-12-30 18:30:50.000

输出

HOURS  MINUTES SECONDS
----   ---     --------
55     16      30

在用这段代码玩完之后,我解决了!!!

SELECT  SUM(DATEPART(hh, CAST(HORA_S AS DATETIME))) 
        + ( SUM(DATEPART(MINUTE, CAST(HORA_S AS DATETIME))) / 60 )
        + ( SUM(DATEPART(MINUTE, CAST(HORA_S AS DATETIME))) % 60
        + ( SUM(DATEPART(SECOND, CAST(HORA_S AS DATETIME))) / 60 ) ) / 60 AS HORAS,
    ( SUM(DATEPART(MINUTE, CAST(HORA_S AS DATETIME))) % 60
        + ( SUM(DATEPART(SECOND, CAST(HORA_S AS DATETIME))) / 60 ) ) % 60 AS MINUTOS,
    SUM(DATEPART(SECOND, CAST(HORA_S AS DATETIME))) % 60 AS SEGUNDOS FROM Table

【问题讨论】:

  • 不清楚..你能解释一下你是如何得出结果的吗?
  • 您知道任何有助于计算两个日期之间差异的函数吗?您是否尝试在总秒数内获得结果?你能想出如何从几秒缩短到几分钟或几小时吗?提示:一分钟有 60 秒,一小时有 3600 秒。
  • 您的所有HORA_E 值是否都发生在同一日期(1899-12-30)?您是否查看过使用DATEDIFF() 来获取总秒数,然后使用除法和模来获取您的小时、分钟和秒?

标签: sql sql-server sql-server-2008


【解决方案1】:

这是一个代码更少的工作示例

示例表

DECLARE @T TABLE (ID int, HORA_S datetime)
insert @T values
(1, '1899-12-30 18:22:50.000'),
(2, '1899-12-30 18:22:50.000'),
(3, '1899-12-30 18:30:50.000')

;WITH T(V) AS (
    SELECT convert(datetime,SUM(convert(float, 2+hora_s)))
    FROM @T
)
SELECT
    [HOURS]   = floor(convert(float,V)*24),
    [MINUTES] = DATEPART(MI,V),
    [SECONDS] = DATEPART(SS,V)
FROM T

注意:查询中的 2+ 假定在 storing time only 之前,日期部分将始终为 1899-12-30。我知道 Delphi 使用该日期作为日期 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多