我知道这是非常常见的问题,但我尝试了一切仍然出错
算术溢出错误
最近扫描时间的sql表中的数据
LAST_SCAN_TIME
1526640929000
1526985902000
1519248191000
1526989503000
1527011103000
1521119505000
1526993100000
1527011100000
1526903104000
1526989500000
1526640305000
1519209904000
1526640302000
1526985903000
1527040804000
1526985900000
1526982304000
0
1526985902000
1526636700000
1527011101000
1526344444000
1526985964000
1526553903000
1519248191000
1519721104000
1526989504000
1526982300000
我正在使用以下查询
select cast(convert(int,DATEADD(second,SA.LAST_SCAN_TIME/1000,'19700101')) as numeric)
from SEM_AGENT SA
OR
select DATEADD(second, SA.LAST_SCAN_TIME, '19700101') as 'Last scan time'
from SEM_AGENT SA
对于两个查询我都会遇到算术溢出错误,请你帮我解决。
Last_scan_time列是bigint数据类型
使用
查询iamselect DATEADD(second, SA.LAST_SCAN_TIME/1000, '19700101') as 'Last scan time' from SEM_AGENT SA
ERROR msg Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.
答案 0 :(得分:1)
SA.LAST_SCAN_TIME是一个BIGINT 和DATEADD尝试将其转换为导致溢出的INT
实际上代表什么是LAST_SCAN_TIME?在我看来,他们是毫秒。
尝试:
select DATEADD(second, SA.LAST_SCAN_TIME/1000, '19700101') as 'Last scan time' from SEM_AGENT SA
根据您提供的样本数据,这使其成为可投射的INT。
如果您不完全控制LAST_SCAN_TIME列中插入的内容,则不建议使用此解决方案。 BIGINT仍然可以将异常转换为INT。
答案 1 :(得分:0)
LAST_SCAN_TIME
代表什么?
运行以下代码,今天的日期' 2018-05-23',
select convert(bigint, getdate())
您可以看到输出为43241
,不在您提供的示例输出范围内。