You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CAST转换为BIGINT仍遇算术溢出错误,请求排查SQL问题

解决SQL算术溢出错误(Arithmetic overflow error converting expression to data type int)

问题根源

你虽然在除法步骤中将求和结果转换为BIGINT,但求和操作本身是基于原字段的INT类型执行的。当sum(da.ASSISTS)或sum(da.acdcalls)的计算结果超过INT类型的最大值(2147483647)时,求和过程中就会触发算术溢出,后续的CAST无法修复这个提前发生的错误。

解决方案

在求和操作前,先将字段转换为BIGINT类型,确保求和计算全程使用大整数类型,避免溢出:

修改后的完整SQL代码

SELECT 
    MONTH(ROW_DATE) AS Month, 
    CAST(SUM(CAST(da.ASSISTS AS BIGINT)) AS BIGINT) / CAST(NULLIF(SUM(CAST(da.acdcalls AS BIGINT)), 0) AS BIGINT) AS [Assist%]
FROM 
    [D998AA0_TELECOM].[APD_TEL].[TCMS_DAGENT] da 
    JOIN [D998AA0_TELECOM].[CentralDWH].[Sessions_booked] sb ON sb.PBX_id = da.LOGID
    JOIN [D998AA0_TELECOM].[APD_TEL].[TCMS_SKILL_DIM_KEY_NEW] dk ON CAST(dk.HuntGrpExt AS CHAR) = sb.p7_value 
WHERE 
    IEXSkillName IN ('Universal', 'Tracking','Shipping')
    AND Channel = 'Phone'
    AND Country = 'US'
    AND [ROW_DATE] NOT LIKE '%C%' 
    AND CONVERT(DATE, ROW_DATE) BETWEEN '2022-01-01' AND '2022-01-31'
GROUP BY 
    MONTH(ROW_DATE)
ORDER BY 
    MONTH(ROW_DATE)

可选方案(需权限)

如果业务允许,直接将da.ASSISTS和da.acdcalls字段的数据类型修改为BIGINT,从根源上避免后续求和操作的溢出问题。

验证点

检查TCMS_DAGENT表中ASSISTS和acdcalls字段的数据类型,若为INT则使用上述方案1即可解决;若字段已是BIGINT,需排查JOIN逻辑是否导致数据异常重复,进而使求和结果超出预期。

内容的提问来源于stack exchange,提问作者Riddhi Solanki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:40:29