0

我有一堆开始和结束时间:

    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 语句?谢谢。

4

1 回答 1

1

您总是可以将 1440 添加到所有计算的增量中,然后取值 mod 1440:

SELECT (120 + 1440) % 1440, (-1321 + 1440) % 1440

结果:

----------- -----------
120         119
于 2012-08-24T14:36:43.760 回答