将毫秒转换为小时,分钟和秒

时间:2012-08-16 05:07:21

标签: time format converter

是的我知道还有其他人提出了同样的问题,但他们的解决方案在这种情况下无法解决。

这是我的问题。

我总结了大量的整数。实际上很多,SUM功能都不起作用。

所以我这样做:

  

总和(施放(LotsofIntegers as decimal))给了我3472201304

我想在hh:mm:ss中查看。问题是Dateadd函数不会接受如此大的数字。否则我就可以这样做

  

CONVERT(VARCHAR,DATEADD(ms,Sum)(cast(LotsofIntegers as。)   十进制)),0),114)

这是常见的解决方案。

我宁愿不用这么多分歧来做这件事。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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;

在5,000,001行的表格中,总和为25,000,706,152(在64位算术下),我得到6944:38:26的正确答案。

问题似乎是,由于4字节的内部表示,最常见的RDBMS日期差异类(包括您似乎正在使用的MSSQL)只能支持2^32毫秒'的差异。这是有问题的RDBMS的限制;显然每次超过40亿毫秒的工作超出了预想的用例。所以不幸的是,除非发布补丁以扩展内置功能(或者存在我没有听说过的升级功能!),所以还有很长的路要走。