SQL减去过夜时间(仅返回几分钟)摆脱负面时间?

时间:2012-08-24 14:25:37

标签: sql-server-2005 time case-statement

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

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

1 个答案:

答案 0 :(得分:1)

你总是可以为所有计算的增量添加1440,然后取值mod 1440:

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

结果:

----------- -----------
120         119