第一步是从您可以使用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);