sql中的关节溢出错误

时间:2018-05-23 09:05:44

标签: sql sql-server

我知道这是非常常见的问题,但我尝试了一切仍然出错

算术溢出错误

最近扫描时间的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数据类型

使用

查询iam
select  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.

2 个答案:

答案 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,不在您提供的示例输出范围内。