「1899-12-30 07:56:00.000」や「1899-12-30 03:52:00.000」などの値を保持する「合計」という列があります。この2つを例にしましょう。別の列を作成するには、時間の値を行に追加する必要があります (つまり、07:56 + 03:52 = 11:48)。
DATEPART を使用すると、時間または分しか抽出できないため、事態はさらに複雑になります。
これら 2 つの値の合計を取得するにはどうすればよいですか?
「1899-12-30 07:56:00.000」や「1899-12-30 03:52:00.000」などの値を保持する「合計」という列があります。この2つを例にしましょう。別の列を作成するには、時間の値を行に追加する必要があります (つまり、07:56 + 03:52 = 11:48)。
DATEPART を使用すると、時間または分しか抽出できないため、事態はさらに複雑になります。
これら 2 つの値の合計を取得するにはどうすればよいですか?
最初のステップは、あなたができる各日付から時間を抽出することです。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);