0

我有一个名为“Total”的列,其中包含“1899-12-30 07:56:00.000”和“1899-12-30 03:52:00.000”等值。让这两个成为我们的例子。我需要将行中的小时值加在一起(即 07:56 + 03:52 = 11:48)以创建另一列。

DATEPART 只允许我提取小时或分钟,这使事情变得更加复杂。

我怎样才能得到这两个值的总和?

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 回答