Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQL减去隔夜时间(只返回分钟)去掉负时间?_Sql Server 2005_Time_Case Statement - Fatal编程技术网

Sql server 2005 SQL减去隔夜时间(只返回分钟)去掉负时间?

Sql server 2005 SQL减去隔夜时间(只返回分钟)去掉负时间?,sql-server-2005,time,case-statement,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) 但正如你所看到的,因为是一夜之间,结果是负面的。关于获得119分钟和179分钟

我有很多开始和结束时间:

    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)

但正如你所看到的,因为是一夜之间,结果是负面的。关于获得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
当DATEDIFF(分钟、最大(最大时间)、最小(最小时间))小于0时的情况
日期添加(分钟,1440,分钟(分钟时间))
否则0结束为deltatest

但是,这段代码不起作用,因为SQL Server只是将时间更改为:1900-01-02 00:48:47.000(第二天,不是我想要的24:48:47)。有什么想法吗?是否有任何方法可以将convert添加到CASE语句??谢谢。

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

SELECT (120 + 1440) % 1440, (-1321 + 1440) % 1440
结果:

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