0

TimeDataTypeを持つフィールドの合計を計算したいと思います。

私のテーブルは下にあります:

  TableA:

            TotalTime
          -------------
             12:18:00
             12:18:00

ここでは、2つの時間フィールドを合計します。以下のクエリを試してみました

   SELECT CAST(
              DATEADD(MS, SUM(DATEDIFF(MS, '00:00:00.000', 
                CONVERT(TIME, TotalTime))), '00:00:00.000'
               ) AS TOTALTIME) 
    FROM [TableA]

しかし、それは出力を次のように与えます

            TOTALTIME
        -----------------
         00:36:00.0000000

しかし、私の希望する出力は次のようになります。

            TOTALTIME
        -----------------
            24:36:00

この出力を取得する方法は?

4

5 に答える 5

5

合計秒数、またはを合計できdatediff(second,0,datecolumn)ます。あなたはそれをいくつかの数学で時間文字列としてフォーマットすることができます。たとえば、合計分数はtotalseconds / 60 % 60です。例えば:

select  cast(sum(datediff(second,0,dt))/3600 as varchar(12)) + ':' + 
        right('0' + cast(sum(datediff(second,0,dt))/60%60 as varchar(2)),2) +
        ':' + right('0' + cast(sum(datediff(second,0,dt))%60 as varchar(2)),2)
from    TestTable

SQLFiddleで動作するコード。

于 2012-05-31T10:09:12.573 に答える
0

24:36は00:36(翌日)と同じです

于 2012-05-31T10:10:56.277 に答える
0

クエリは正常に機能しています。結果は正しいです。

24:36は翌日の00:36の時間です。

最大24時間を表示できます。あなたはどの日も使用していないので、24時間ごとに翌日=0時間です。

列の値を変更するだけで、それを確認できます。

于 2012-05-31T10:24:02.107 に答える
0

少し時間がかかりますが、日のロールオーバーを避けたいが、2番目のTIMEを構成要素のdatepart()に分割して、それらを追加することができる場合はどうでしょうか。(24より大きい時間値が必要な場合は、varcharとして表示することもできます。

于 2012-05-31T10:37:08.690 に答える
0

これを試して。

SELECT 
CONVERT(VARCHAR(MAX),SUM(DATEPART(HH,CAST(YOUR_FIELD AS DATETIME)))+ 
(SUM(DATEPART(MINUTE,CAST(YOUR_FIELD AS DATETIME)))/60) + 
(SUM(DATEPART(MINUTE,CAST(YOUR_FIELD AS DATETIME)))%60 + 
(SUM(DATEPART(SECOND,CAST(YOUR_FIELD AS DATETIME)))/60))/60) + ':' +
RIGHT('00' + CONVERT(VARCHAR(MAX), 
(SUM(DATEPART(MINUTE,CAST(YOUR_FIELD AS DATETIME)))%60+ 
(SUM(DATEPART(SECOND,CAST(YOUR_FIELD AS DATETIME)))/60))%60),2) + ':' +   
RIGHT('00' + CONVERT(VARCHAR(MAX),SUM(DATEPART(SECOND, 
    CAST(YOUR_FIELD AS DATETIME)))%60),2) AS YOUR_FIELD

FROM YOUR_TABLE
于 2014-08-27T22:21:19.907 に答える