与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只会计算数据透视表中带有“时间”(十进制)部分的总计。