2012-08-24 22 views
0

我有一大堆的開始和結束時間:SQL減去OverNight時間(僅返回分鐘)擺脫負面時間?

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年1月2日00:48:47.000(第二天,並不像24:48:47,這是我想要的是)。有什麼想法嗎?有什麼方法可以將轉換添加到CASE語句?謝謝。

回答

1

你總是可以添加1440至所有計算的變化量的,然後採取值MOD 1440:

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

結果:

----------- ----------- 
120   119 
+0

是,這一工程。 – akwarywo