【问题标题】:How to concatenate datepart results?如何连接日期部分结果?
【发布时间】:2015-03-26 12:37:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql-server-2008-r2 datepart


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2012-08-15
      • 2015-01-04
      • 2023-03-21
      • 1970-01-01
      • 2013-03-16
      • 2011-10-07
      • 1970-01-01
      • 2012-09-26
      • 2020-06-10
      相关资源
      最近更新 更多