【发布时间】:2015-02-24 04:43:36
【问题描述】:
我正在尝试从两个时间戳列(日期时间)获取总时差
我目前有一个 表 1 设置,如下所示:
-
Time_Line_Down=> 日期时间 -
Time_Line_Ran=> 日期时间 -
Total_Downtime=> 带有公式的计算列:(当 [Time_Line_Down] 为 NULL 然后为 NULL else CONVERT([varchar],case when [Time_Line_Ran] IS NULL then NULL else [Time_Line_Ran]-[Time_Line_Down] end,(108)) end)
每次出现某些情况时,我都会将这三列(我有更多列,但问题出在这一列)复制到另一个 表 2 中,最初设置如下:
-
Time_Line_Down=> 日期时间 -
Time_Line_Ran=> 日期时间 -
Total_Downtime=> 日期时间
然后我使用 Excel 电子表格从 SQL Server“获取外部数据”并使用数据透视表处理数据。
示例
-
Time_Line_Down= 2015-02-20 12:32:40.000 -
Time_Line_Ran= 2015-02-20 12:34:40.000 -
Total_Downtime= 1900-01-01 00:02:00.000
期望的输出
我希望数据透视表能够为我提供该表中所有行的停机时间总计
假设累计停机时间是四十五小时五十分钟三十秒,它应该读作 (45:50:30)
问题:
即使我将 excel 数据透视表中的 Total_Downtime 列格式化为 h:mm:ss 以读取如下:
-
Total_Downtime= 0:02:00
随着行数的累积和总计的计算,时间戳的“日期”部分出现混乱,结果是总数超过 24 小时
我的尝试
我将表2中Total_Downtime列的数据类型格式更改为time(0),这样它就不会发送“Date”部分,只发送“Time”部分时间戳,它正在工作并读出 00:02:00
但是现在我的数据透视表中该列的所有值都是 0:00:00,无论 SQL 表中实际存在什么值。
有什么建议吗?
【问题讨论】:
-
我不会将您的数据类型更改为时间。几乎不可能确定两者跨越日期障碍的时间。你只有 3 个你关心的数据部分,首先做一个 datediff 几个小时,然后一个 datediff for minutes mod 60 得到分钟,最后一个 datediff seconds mod 60 得到秒。应该很简单。
标签: sql sql-server excel