【问题标题】:How do I convert negative seconds to HH:MM:SS如何将负秒数转换为 HH:MM:SS
【发布时间】:2016-03-22 14:58:01
【问题描述】:

我正在尝试将具有正负秒数的字段转换为 HH:MM:SS,但在此过程中失败。

CONVERT(VARCHAR(6), RPAYCODE.TIMEINSECONDS/3600) +
':' + 
RIGHT('0' + CONVERT(VARCHAR(2), (RPAYCODE.TIMEINSECONDS % 3600) / 60), 2)   
AS "Pay Code Hrs"

当秒数为正时,它可以正常工作= 00:30:00

当秒数为负时,我会得到这个= 0:0*

【问题讨论】:

  • 还有一个问题:TIMEINSECONDS 中有哪些值?当我使用 100-30 之类的值尝试您的 SQL 时,我得到了垃圾......
  • 还有一个问题:您的数据中有 ReferenceDate 吗? Seconds 运行的某个时间点?如果您的秒数超过 24 小时怎么办...
  • 我希望将其视为 -00:30:00,并且该字段仅将其存储为一个值,并且永远不会超过 24 小时

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


【解决方案1】:

这应该处理负值:

CASE
    WHEN @time_in_seconds < 0 THEN '-'
    ELSE ''
END +
CONVERT(VARCHAR(6), ABS(RPAYCODE.TIMEINSECONDS)/3600) + ':' +
RIGHT('0' + CONVERT(VARCHAR(2), (ABS(RPAYCODE.TIMEINSECONDS) % 3600)/60), 2) AS [Pay Code Hrs]

【讨论】:

    【解决方案2】:

    精益和简单的转换

    跳过所有那些不必要的计算和字符串操作:

    CASE WHEN RPAYCODE.TIMEINSECONDS < 0 THEN '-' ELSE '' END  -- sign
    + CONVERT(varchar, DATEADD(s, ABS(RPAYCODE.TIMEINSECONDS), 0), 108) -- hh:mm:ss
    

    数字格式108hh:mm:ss

    【讨论】:

    • 这是我见过的最好的答案。它很简单,可以处理负面时间。
    • 我喜欢这个答案
    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2015-09-29
    • 2012-02-20
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多