我有以下TIME数据类型表
澄清:我代表视频的小时/分钟/秒,并想知道视频的持续时间。
runtime
----------------
01:27:19.0000000
01:26:09.0000000
01:00:56.0000000
01:09:59.0000000
01:25:43.0000000
01:16:01.0000000
01:27:12.0000000
01:22:00.0000000
01:17:47.0000000
01:31:07.0000000
01:36:23.0000000
01:13:29.0000000
01:20:12.0000000
01:03:24.0000000
00:58:42.0000000
我希望得到所有这些时间的总和。
答案 0 :(得分:6)
我还没有使用过2008,我没有一个方便的实例来检查这个,但是这样的事情可能有用:
SELECT
DATEADD(ms, SUM(DATEDIFF(ms, '00:00:00.000', my_time)), '00:00:00.000')
FROM
dbo.My_Table
正如le dorfier指出的那样,增加时间有点毫无意义,因为它们应该代表一天中的时间。我假设您使用它们来表示小时/分钟/秒。
哦,如果超过24小时,我不知道上面会发生什么。
答案 1 :(得分:0)
我能想到的最好的方法是将时间跨度分解为小时,分钟,秒和毫秒组件,将其全部转换为毫秒(通过添加和相乘),然后添加它们并使用模数和减法将其转回进入一个时间跨度。
例如
create function dbo.GetMilliseconds (@timespan varchar (16))
returns int
as
begin
declare @ms int
declare @seconds int
declare @min int
declare @hour int
set @ms = cast(substring(@timespan, 10, 7) as int)
set @seconds = cast(substring(@timespan, 7, 2) as int)
set @min = cast(substring(@timespan, 4,2) as int)
set @hour = cast(substring(@timespan, 1, 2) as int)
return @ms + (@seconds * 1000) + (@min * 60000) + (@hour * 3600000)
end
go
create function dbo.ParseMilliseconds (@timespan int)
returns varchar (16)
as
begin
declare @hour int
declare @min int
declare @seconds int
declare @ms int
declare @leftover int
set @hour = @timespan / 3600000 /* this will round down */
set @leftover = @timespan % 3600000
set @min = @leftover / 60000
set @leftover = @leftover % 60000
set @seconds = @leftover / 1000
set @ms = @leftover % 1000
return 'You''ll have to the string conversion yourself'
end
go
然后SELECT dbo.ParseMilliseconds(sum(dbo.GetMilliseconds(timespan))) as added_timespan
我还没有对所有这些进行测试,可能会有更简单的方法,但我知道这会有效。
答案 2 :(得分:0)
的一些变体
SELECT SUM(DATEDIFF(MINUTE,'0:00:00',TimeCol))来自TimeTable
会有效但
您必须通过从每个日期时间减去日期部分进行标准化 你必须将总分钟转换为时间