如何连接日期部分结果?
How to concatenate datepart results?
我有一个名为 "Total" 的列,其中包含诸如“1899-12-30 07:56:00.000”和“1899-12-30 03:52:00.000”之类的值。让这两个成为我们的榜样。我需要将行中的小时值加在一起(即 07:56 + 03:52 = 11:48)以创建另一列。
DATEPART 允许我只提取小时或分钟,这使事情变得更加复杂。
我怎样才能得到这两个值的总和?
第一步是从每个日期中提取时间,您可以使用 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);
我有一个名为 "Total" 的列,其中包含诸如“1899-12-30 07:56:00.000”和“1899-12-30 03:52:00.000”之类的值。让这两个成为我们的榜样。我需要将行中的小时值加在一起(即 07:56 + 03:52 = 11:48)以创建另一列。
DATEPART 允许我只提取小时或分钟,这使事情变得更加复杂。
我怎样才能得到这两个值的总和?
第一步是从每个日期中提取时间,您可以使用 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);