【问题标题】:T-SQL Format seconds as HH:MM:SS timeT-SQL 将秒格式化为 HH:MM:SS 时间
【发布时间】:2012-10-22 01:08:07
【问题描述】:

是否有任何棘手的方法来格式化秒,如小时:分钟:秒。例如,

3660

秒会显示为

01h 01m 00s

01:01:00

我知道这样做的标准方法:

  1. 将所有秒数除以 3600 得到小时数
  2. 将剩余的秒数除以 60 得到分钟
  3. 剩下的就是秒

我遇到了以下问题:

  1. 我无法创建单独的函数来执行此操作。

  2. 我的代码使用多个 CTE 在视图中。因此,可以声明变量 仅使用 CTE。

  3. 我无法使用标准解决方案,因为我将 结果比一天大 - How to convert Seconds to HH:MM:SS using T-SQL

【问题讨论】:

  • 所以如果你有 86399 秒,你想要 23:59:59,但是如果你有 86400 秒,你想要 24:00:00 等等?
  • 如果我有 3 天的秒数,它将显示 72:00:00。我明白你的意思,我应该说小时没有最大值。

标签: sql tsql time format seconds


【解决方案1】:
SELECT RIGHT('00'+CONVERT(VARCHAR(10),Seconds/3600),2)  
    +':' 
    + RIGHT('00'+CONVERT(VARCHAR(2),(Seconds%3600)/60),2) 
    +':' 
    + RIGHT('00'+CONVERT(VARCHAR(2),Seconds%60),2) AS [HH:MM:SS] 
FROM table1

结果:

HH:MM:SS
01:01:00
01:03:20
01:10:00
00:10:00
00:01:00
00:00:30
24:00:00
24:06:40

See this SQLFiddle

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT CONVERT(TIME(0), DATEADD(SS,***seconds***,0),108) as 'FieldName'
    

    将返回HH:MM:SS

    例子:

    46800 秒 = 下午 1:00

    字段名 = 13:00:00

    希望这会有所帮助。

    【讨论】:

    • 如果要转换整个记录表上的列,我认为这应该是首选解决方案。
    • 请注意,TIME 数据类型不支持大于 86,399 的值,因此这不适用于时间可能超过 24 小时的原始意图。
    【解决方案3】:
    SELECT cast(seconds/3600 as varchar(6)) +
    right(cast(dateadd(second, seconds,0) as time(0)), 6)
    FROM <yourtable>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-04
      • 2011-06-17
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 2023-04-10
      相关资源
      最近更新 更多