小编典典

将毫秒转换为天,小时,分钟和秒

sql

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

http://msdn.microsoft.com/zh-
CN/library/system.datetime.ticks.aspx

我需要将所有记录的总和转换为Days:Hours:Minutes:Seconds:Milliseconds。

它适用于单个记录:

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的算术溢出错误。

我知道溢出来自转换为数据类型的时间函数…

帮助表示感谢,谢谢!


阅读 219

收藏
2021-04-07

共1个答案

小编典典

对于仅接受的DATEADD来说太大了int
将其分为两部分:秒,然后是毫秒。

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
2021-04-07