是的我知道还有其他人提出了同样的问题,但他们的解决方案在这种情况下无法解决。
这是我的问题。
我总结了大量的整数。实际上很多,SUM功能都不起作用。
所以我这样做:
总和(施放(LotsofIntegers as decimal))给了我3472201304
我想在hh:mm:ss中查看。问题是Dateadd函数不会接受如此大的数字。否则我就可以这样做
CONVERT(VARCHAR,DATEADD(ms,Sum)(cast(LotsofIntegers as。) 十进制)),0),114)
这是常见的解决方案。
我宁愿不用这么多分歧来做这件事。
有人可以帮忙吗?
答案 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亿毫秒的工作超出了预想的用例。所以不幸的是,除非发布补丁以扩展内置功能(或者存在我没有听说过的升级功能!),所以还有很长的路要走。