执行SQL语句遇Msg 8115错误:算术溢出转换为varchar求指导
SQL执行报错解决办法
问题还原
执行这段SQL时触发错误:
SELECT dateadd(s,convert(bigint, mcdt.FROMDATE) / 1000,convert(datetime, '1-2-1970 00:00:00') ) AS "From Date",FROM "MaintenanceContract" "mcdt"
错误提示:
"Msg 8115, Level 16, State 2, Line 1 Arithmetic overflow error converting expression to data type varchar."
报错原因
- 语法错误:
AS "From Date"后面多了个逗号,数据库会误将FROM识别为待查询的列,尝试转换为varchar类型时直接触发溢出错误,这是当前报错的直接原因。 - 潜在数值风险:如果
FROMDATE存储的数值过大,转换为bigint类型时也可能溢出,但当前问题根源是语法问题。
修复方案
第一步:修正语法错误
删除"From Date"后的多余逗号,同时建议将日期字符串改为标准格式(避免不同环境下的解析歧义),修正后的SQL如下:
SELECT dateadd(s, convert(bigint, mcdt.FROMDATE) / 1000, convert(datetime, '1970-01-02 00:00:00')) AS "From Date" FROM "MaintenanceContract" "mcdt"
第二步:若仍报错,排查数值问题
如果修正语法后依旧触发溢出错误,需要检查FROMDATE字段:
- 确认字段类型,若为字符串类型,需确保所有值都能转换为有效整数;
- 若数值超出bigint范围(bigint最大值为9223372036854775807),可改用decimal类型转换后再计算:
SELECT dateadd(s, convert(decimal(20,0), mcdt.FROMDATE) / 1000, convert(datetime, '1970-01-02 00:00:00')) AS "From Date" FROM "MaintenanceContract" "mcdt"
内容的提问来源于stack exchange,提问作者Saravanan M
相关产品推荐
相关产品推荐

