2012-08-16 92 views
0

是的我知道還有其他人問過同一個問題,但他們的解決方案在這種情況下不起作用。將毫秒轉換爲小時,分和秒

這裏是我的問題。

我總結了一個真正大量的整數。實際上很多SUM函數都不起作用。

所以我這樣做:

總和(CAST(LotsofIntegers爲十進制)),這給了我3472201304

我想在HH查看此:MM:SS。問題是Dateadd函數不會接受這麼大的數字。否則,我可能只是這樣做

CONVERT(VARCHAR,DATEADD(MS,SUM(CAST(LotsofIntegers爲 十進制)),0),114)

這是常見的解決方案。

我寧願不用非常辛苦的方式來做這個事情,而且還有很多分歧。

任何人都可以協助嗎?

回答

0

試試這個(MySQL的句法;轉換到您選擇的RDBMS):

SELECT CONCAT( 
    CAST((@hours := FLOOR(SUM(msec)/3600000)) AS CHAR), 
    ":", 
    CAST((@minutes := FLOOR((SUM(msec) - @hours * 3600000)/60000)) AS CHAR), 
    ":", 
    CAST((@seconds := FLOOR((SUM(msec) - @hours * 3600000 - @minutes * 60000)/1000)) AS CHAR) 
) FROM my_table WHERE 1; 

上的5000001行的表用25000706152的總和(在64位運算),我得到的正確答案6944:38:26

問題似乎是由於4字節的內部表示,最常見的RDBMS日期差異類(包括您似乎正在使用的MSSQL)只能支持2^3210毫秒的差異。這是所討論的RDBMS的侷限性;顯然每次超過40億msec的工作超出了設想的用例。所以不幸的是,除非發佈補丁來擴展內置功能(或者存在一個我沒有聽說過的升級功能!),但漫長的路要走。

+0

好的,謝謝你。我想這是很長的路。 – user1413844 2012-08-21 06:12:51