我在 sql server 的表中有 2 列 - [发生时间 (NT)] 和 [清除时间(NT)] 的格式为 yyyy-mm-dd hh:mm:ss,第三列 [Outage Duration] 的格式为hh:mm:ss
[标识符] | [发生时间(NT)] | [清关时间(NT)] | [停电时间]
4 | 2014-12-28 15:06:33.000 | 2014-12-28 15:18:18.000 | 00:11:45.000
中断持续时间计算为 [发生时间 (NT)] 和 [清除时间(NT)] 的差异目前我执行此操作的代码如下:
select distinct a.[Identifier]
,a.[Occurrence Time(NT)]
,a.[Clearance Time(NT)]
,cast((cast(a.[Clearance Time(NT)] as datetime) - cast(a.[Occurrence Time(NT)]as datetime)) as time )
as [Outage Duration]
from final_report_2 a
演员表只是一个故障保险,因为两列都已经是日期时间了。此代码适用于 [发生时间 (NT)] 和 [清除时间(NT)] 在同一天的所有情况,即中断在 24 小时内
例如,在上面的行号中。4 日均以 28 日为日期,因此正确计算了中断。
但是在不同天数的情况下,中断持续时间计算错误。
2678 | 2014-12-28 12:50:04.000 | 2014-12-31 23:59:59.000 | 11:09:55.000
在第 2678 行,时间应该是 83:09:55 而不是 11:09:55。
因此,我还需要考虑天数的差异,然后以 hh:mm:ss 格式计算 [Outage duration]。
一种可能的方法如下:
(23:59:59 – 12:50:04) + 00:00:01 + ((31-28-1)*24):00:00 + 23:59:59
其中第一部分计算第一天的时间,然后第二部分计算编号。[发生时间 (NT)] 和 [清除时间(NT)] 之间的全天数乘以 24,最后部分表示最后一天的时间。
如何在 sql server 中实现上述功能?可以使用 DATEPART 或 DATEADD 函数来完成吗?