如何连接datepart结果?

时间:2015-03-26 12:37:23

标签: sql-server-2008-r2 datepart

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

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

如何获得这两个值的总和?

1 个答案:

答案 0 :(得分: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);