我有一堆开始和结束时间:
Start End Delta
20:47:22 22:47:02 120
22:49:12 0:48:47 -1321
0:50:42 2:50:22 120
...
23:11:07 2:10:44 -1261
我使用的代码如下(因为时间是varchar)
CONVERT(VARCHAR(8), DATEDIFF(minute, max(max_time), min(min_time)) ,114)
as delta_time,
但正如你所看到的,因为它是一夜之间,结果是消极的。关于获得119分钟和179分钟的正确结果的任何想法(在上面的例子中)。
我想过使用一个case语句来检查delta是否为负数。如果是负数,请将24小时添加到结束时间,然后尝试减去。
CASE WHEN DATEDIFF(minute, max(max_time), min(min_time)) < 0 THEN
DATEADD(minute, 1440, min(min_time))
ELSE 0 END AS deltatest
但是这段代码不起作用,因为SQL Server只是将时间更改为:1900-01-02 00:48:47.000(第二天,不像24:48:47,这就是我想要的) 。有什么想法吗?是否有任何方法可以将转换添加到CASE语句?感谢。
答案 0 :(得分:1)
你总是可以为所有计算的增量添加1440,然后取值mod 1440:
SELECT (120 + 1440) % 1440, (-1321 + 1440) % 1440
结果:
----------- -----------
120 119