2009-05-29 8 views
7

I持っTIMEデータ型の次の表テーブルからTIMEデータ型(MSSQL08)のSUMを取得

明確化:私は動画の時間/分/秒を表すとビデオがなりますどのくらい把握したいのです。

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 

これらのすべての時間の合計を取得します。

私はあまりまだ2008を使用していないと私は、私はこれをチェックしていますが、このような何かが働くかもしれない便利なインスタンスを持っていない
+0

どのような目的のためにですか?それは無意味です。 – dkretz

+3

私はそれが意味がないとは思わない...おそらく、これらはアルバムの曲の長さであり、彼はアルバム全体の合計時間を望んでいるだろうか?ちょうど1つの可能性... – JosephStyons

+0

ジョセフは正しいです...私は "NHibernateの夏"のビデオシリーズの期間を取得したいので、私は他の人にこのシリーズを勧めます。通過する。 –

答えて

6

SELECT 
    DATEADD(ms, SUM(DATEDIFF(ms, '00:00:00.000', my_time)), '00:00:00.000') 
FROM 
    dbo.My_Table 

ルdorfierが指摘するように、回を追加します彼らは一日の時間を表すはずですから、少し意味がありません。私はあなたが時間/分/秒を示すためにそれらを使用しているという前提のもとにいます。

ああ、24時間以上経過しても上記で何が起こるかわからない。

+0

魅力的なように働きました...結果は '1900-01-01 19:36:23.000'でした。答えは24時間以上だったので、翌日に行くだけです。 –

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

私はこのすべてをテストしていない、と単純な方法があるかもしれませんが、私は、これは動作します知っています。

あなたが引くことによって正規化する必要があります時刻表

FROM

SELECT SUM(DATEDIFF(MINUTE、 '0時00分00秒'、TimeCol))のいくつかのバリエーションが動作します

0

しかし

日付時刻の日付部分と 合計分を1時間に変換する必要があります

関連する問題