8

Microsoft SQL Server 2008R2 にティックで満たされた bigint フィールドがあります (1 つのティックは 100 ナノ秒または 1 千万分の 1 秒を表します。1 ミリ秒には 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 関数から来ていることは知っています...

助けていただければ幸いです、ありがとう!

4

1 に答える 1

8

のみを受け入れるDATEADDには大きすぎintます。
秒とミリ秒の 2 つの部分に分割します。

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-10-06T07:44:44.383 に答える