代码之家  ›  专栏  ›  技术社区  ›  Ege Bayrak

如何连接日期部分结果?

  •  0
  • Ege Bayrak  · 技术社区  · 10 年前

    我有一个名为“总计”的列,其中包含诸如“1899-12-30 07:56:00.000”和“1899-12-3 0 03:52:00.000”之类的值。我需要将行中的小时值相加(即07:56+03:52=11:48)以创建另一列。

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

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

    1 回复  |  直到 10 年前
        1
  •  1
  •   GarethD    10 年前

    第一步是从你的每一个约会中提取你可以做的时间 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);
    
    推荐文章