0

「1899-12-30 07:56:00.000」や「1899-12-30 03:52:00.000」などの値を保持する「合計」という列があります。この2つを例にしましょう。別の列を作成するには、時間の値を行に追加する必要があります (つまり、07:56 + 03:52 = 11:48)。

DATEPART を使用すると、時間または分しか抽出できないため、事態はさらに複雑になります。

これら 2 つの値の合計を取得するにはどうすればよいですか?

4

1 に答える 1

1

最初のステップは、あなたができる各日付から時間を抽出することです。CAST(Total AS TIME)時間を一緒に追加することはできないため、次のステップは、ミリ秒(または秒、または分などの精度に応じて)の数を見つけることですあなたがなりたい)あなたの時間と真夜中から:

SELECT  Diff = DATEDIFF(MILLISECOND, '00:00:00', CAST(t.Total AS TIME))
FROM    (VALUES 
            (CAST('1899-12-30 07:56:00.000' AS DATETIME2)),
            (CAST('1899-12-30 03:52:00.000' AS DATETIME2))
        ) t (Total);

これは与える:

Diff
---------
28560000
13920000

次に、これらの値を合計して を取得できます42480000。次に、このミリ秒数を真夜中に戻すと、次のようになります。

SELECT  DATEADD(MILLISECOND, 42480000, CAST('00:00:00' AS TIME))

あなたが得る11:48。したがって、最終的なクエリは次のようになります。

SELECT  Val = DATEADD(MILLISECOND, 
                        SUM(DATEDIFF(MILLISECOND, '00:00:00', CAST(t.Total AS TIME))), 
                        CAST('00:00:00' AS TIME(3)))
FROM    (VALUES 
            (CAST('1899-12-30 07:56:00.000' AS DATETIME2)),
            (CAST('1899-12-30 03:52:00.000' AS DATETIME2))
        ) t (Total);
于 2015-03-26T13:23:05.933 に答える