【问题标题】:SQL Throwing an Arithmetic Overflow ErrorSQL 引发算术溢出错误
【发布时间】:2018-10-10 01:42:22
【问题描述】:

运行简单聚合函数时出现“将表达式转换为数据类型 int 的算术溢出错误”错误(请参见下面的代码)。当我限制日期范围时,我可以看到结果实际上超出了 INT 数据类型限制...我尝试将整个表达式转换为 BIGINT 没有成功。有谁知道我该如何解决这个问题?

所有这 3 个查询都会引发上述相同的错误:

Select  (SUM(ACDTalkTimeInSec) + SUM(TotAcwTimeInSec) + SUM(HoldTimeInSec)) as AHT
From ColTelephony.dbo.vwACDSkillCombined acd
Where WorkDte between '1/2/2018' AND '10/5/2018'

Select  CAST(Cast(SUM(ACDTalkTimeInSec) AS BIGINT) + CAST(SUM(TotAcwTimeInSec) AS BIGINT) + CAST(SUM(HoldTimeInSec) AS BIGINT) AS BIGINT) as AHT
From ColTelephony.dbo.vwACDSkillCombined acd
Where WorkDte between '1/2/2018' AND '10/5/2018'

Select  Cast(((SUM(ACDTalkTimeInSec) + SUM(TotAcwTimeInSec) + SUM(HoldTimeInSec))) AS BIGINT) as AHT
From ColTelephony.dbo.vwACDSkillCombined acd
Where WorkDte between '1/2/2018' AND '10/5/2018'

【问题讨论】:

  • 你需要在求和之前进行转换,而不是之后。
  • 谢谢!工作完美!我讨厌答案如此简单,哈哈。请张贴作为答案,我会这样标记它。再次感谢!

标签: sql-server error-handling overflow aggregate-functions


【解决方案1】:

SMor 在 cmets 中回答了它,但这里是 sql:

Select SUM(CAST(ACDTalkTimeInSec AS BIGINT)) + SUM(CAST(TotAcwTimeInSec AS BIGINT)) 
    + SUM(CAST(HoldTimeInSec AS BIGINT)) as AHT
From ColTelephony.dbo.vwACDSkillCombined acd
Where WorkDte between '1/2/2018' AND '10/5/2018'

如果 SMor 发布他们的答案,则接受。我没有测试代码,所以请原谅任何拼写错误。

【讨论】:

  • 我正在寻找同样的问题。谢谢@Michael
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多