与date时间的分钟差异
我试图从两个时间戳列(date时间)获得总时间差
我目前有如下的表1设置:
-
Time_Line_Down
=> datetime -
Time_Line_Ran
=> datetime -
Total_Downtime
=>计算公式:([Time_Line_Down]]为NULL的情况下为NULL,否则为其他CONVERT([varchar]),[Time_Line_Ran]为NULL,其余为NULL [Time_Line_Ran] – [Time_Line_Down] end,(108)
每当出现一些情况时,我将这三列(我有更多的列,但问题在此)复制到另一个表2中,原本如下设置:
-
Time_Line_Down
=> datetime -
Time_Line_Ran
=> datetime -
Total_Downtime
=> datetime
然后,我使用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秒的累计停机时间应该是(45:50:30)
问题是 :
即使我把excel数据透视表中的Total_Downtime
列格式化为h:mm:ss
来读取,如下所示:
-
Total_Downtime
= 0:02:00
随着行累积和总计算,时间戳的“date”部分是混乱的结果是总计超过24小时
我曾经尝试过
我将表2中的 Total_Downtime
列的数据types格式改为time(0),以便它不会发送“Date”部分,只发送时间戳的“Time”部分,它正在读出00:02: 00
但是现在,在我的数据透视表中,该列的所有值都是0:00:00,不pipeSQL表中实际存在什么值。
有什么build议么?
您可以使用超过24小时的Excel时间格式[h]:mm:ss
。
或者,您可以使用SQL函数DATEDIFF
以秒为单位获得总停机时间,然后将其转换为您需要在Excel中显示的时间,例如
case when [Time_Line_Down] IS NULL then NULL else case when [Time_Line_Ran] IS NULL then NULL else datediff(ss, Time_Line_Ran, Time_Line_Down) end end
我不认为你需要这里的CASE
陈述,你可以使用
datediff(ss, Time_Line_Ran, Time_Line_Down)
感谢大家的帮助,
我提前尝试了DATEDIFF函数,我把Table 1的计算列公式和Table 2 Total_Downtime列数据types改为int。 一旦导入到excel这个数值需要一些额外的计算。
原则上是最好的答案,并且应该为任何想要计算两个时间戳之间差异的人工作,如前所述,非常简单。
但在我的情况下,我需要保持两件事情:
1) 表1中 Total_Downtime列的格式为00:00:00,使用DATEDIFF时变为整数值
2)数据透视表Total_Downtime列格式[h]:mm:ss(由TobyLLbuild议)在excel中,这需要几个计算从秒
解
在得知我每次从表1到表2复制后,计算出的值(例如00:02:00)变成了1900-01-01 00:02:00.000,并且当导入到Excel时等于1.001388889,我决定强制时间戳记的“date”部分为1899-12-31,以便Excel只会计算数据透视表中带有“时间”(十进制)部分的总计。