【问题标题】:Converting Milliseconds to Days, hours, minutes and seconds将毫秒转换为天、小时、分钟和秒
【发布时间】:2012-09-27 07:00:44
【问题描述】:

我在 Microsoft SQL Server 2008R2 中有一个 bigint 字段,其中填充了刻度(单个刻度表示一百纳秒或百万分之一秒。一毫秒内有 10,000 个刻度。)

http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

我需要将所有记录的总和转换为天:小时:分钟:秒:毫秒。

它适用于单个记录:

SELECT CONVERT(TIME, DATEADD(ms, duration/10000, 0)) FROM tblMediaFileProperties WHERE FileId = '6C0A849D-95B4-4755-A923-B9DD8F1AF23E'

但如果将所有记录汇总起来使用:

SELECT CONVERT(TIME, DATEADD(ms, SUM(duration/10000), 0)) FROM tblMediaFileProperties 

我得到一个:

将表达式转换为数据类型 int 时出现算术溢出错误。

我知道溢出来自 CONVERT to Data Type TIME 函数...

感谢您的帮助,谢谢!

【问题讨论】:

    标签: sql sql-server valueconverter


    【解决方案1】:

    对于只接受 intDATEADD 来说太大了。
    将其分为两部分:秒,然后是毫秒。

    SELECT CONVERT(TIME,
              DATEADD(ms, SUM(duration/10000 % 1000),
              DATEADD(ss, SUM(duration/10000000), 0)))
    FROM tblMediaFileProperties 
    

    如果您的总持续时间超过 1 天,您可以使用它来分别获取天数和 hr:min:sec:ms。如果你真的想要文本形式的结果,这是一个强制转换和字符串连接的问题。

    declare @duration bigint
    set @duration = 1230000000
    SELECT @duration/10000/1000/60/60/24 DAYS,
           CONVERT(TIME,
              DATEADD(ms, SUM(@duration/10000 % 1000),
              DATEADD(ss, SUM(@duration/10000000), 0))) HR_MIN_SEC
    

    【讨论】:

      猜你喜欢
      • 2012-01-06
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      相关资源
      最近更新 更多