0

Sum を HH:MM:SS で計算したい

最初に、HH:MM:SS の datetime 差を計算しています (うまくいきます)

Select  * 
Into    #_TicketType 
From    (    
        Select  *,
                convert(varchar(5), DateDiff(s, [Start Date] , [End Date] )/3600)
              + ':'
              + convert(varchar(5),DateDiff(s, [Start Date] , [End Date])%3600/60)
              + ':'
              + convert(varchar(5),(DateDiff(s,[Start Date] , [End Date])%60)) as [Ticket Type Time]
            ,
                convert(varchar(5),DateDiff(s, [Ticket Open Time]  , [Ticket Closed Time] )/3600)
              + ':'
              + convert(varchar(5),DateDiff(s,[Ticket Open Time]  , [Ticket Closed Time])%3600/60)
              + ':'
              + convert(varchar(5),(DateDiff(s,[Ticket Open Time]  , [Ticket Closed Time])%60))[Total Call Time]
        FROM CTE
        )_A

[Start Date] , [End Date],[Ticket Open Time] , [Ticket Closed Time]タイプの列DateTime

さらに、HH:MM:ss で合計を計算したい

私のクエリ:-

Select Distinct ATM,
    CAST (
          (SUM (datepart(hh, convert (varchar, [Ticket Type Time], 108)))
        + (sum (datepart(mi, convert (varchar, [Ticket Type Time], 108)))/60) ) 
    AS VARCHAR(2))
    + ':'
    + CAST (
          sum( datepart(mi, convert (varchar, [Ticket Type Time], 108))) 
        - 60 
        * (sum(datepart(mi, convert (varchar, [Ticket Type Time], 108)))/60)
    as VARCHAR(2))
    + ':' 
    + CAST (
          sum( datepart(ss, convert (varchar, [Ticket Type Time], 108))) 
        - 60 
        * (sum( datepart(SS, convert (varchar, [Ticket Type Time], 108)))/60)
    as VARCHAR(2))
From #_TicketType Group By ATM

それは私にエラーを与えます

**Msg 241, Level 16, State 1, Line 67
Conversion failed when converting date and/or time from character string.**

データベース SQL サーバー 2008

4

2 に答える 2

2

varchar ではなく、時刻 (SQL Server のバージョンがサポートしていない場合は datetime) に変換するつもりだったと思います。

しかし、これは非常に悪い方法です。25:01:01 は有効な日時ではありません。(別の回答で提案されているように)秒を合計し、最後に好きなように結果をフォーマットする必要があります。

したがって、最初のクエリには、期間 (秒) を示す別の列を含めます。

, DateDiff(s,[Start Date] , [End Date]) as [Ticket Type Seconds]

次に、2 番目のクエリで、SUM([Ticket Type Seconds]) を次のようにフォーマットします。

STR(SUM([Ticket Type Seconds])/3600) 
+ RIGHT(CONVERT(char(8),DATEADD(s,SUM([Ticket Type Seconds]),0),108),6)

これにより、秒を変換したときに得られる日時の ':MM:SS' 部分と連結された時間 (24 を超える可能性があります) が得られます (0 日付: 19000101 00:00:00 に追加されます)。日付時刻。

于 2013-04-12T16:28:54.823 に答える