Bad format for BigDecimal ‘1,100.00‘ in column 1 错误

问题场景:
订单信息导出时,在选择某一时间段数据时会报错,但是一般不报错。

错误信息:
org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column ‘FORMAT(spd.cost_price/100,2)’ from result set. Cause: java.sql.SQLException: Bad format for BigDecimal ‘1,100.00’ in column 1.
; ]; Bad format for BigDecimal ‘1,100.00’ in column 1.; nested exception is java.sql.SQLException: Bad format for BigDecimal ‘1,100.00’ in column 1.
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:110)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)

错误原因分析:
查看报错信息为SQLException,但是本地运行sql并没有问题。于是进一步查看报错信息Bad format for BigDecimal分析可能是类型没有对应上导致数字转换出错,但是查看mybatis转化的对象字段类型是bigdecimal,与数据库的字段类型一致。在仔细看报错信息‘1,087.50’,第一眼感觉有点怪怪的但是没有发现问题。只好找到对应的sql进行排查,在看sql的过程中看到了使用了FORMAT作为四舍五入的函数。

查询FORMAT函数使用方法后找到问题的关键是:FORMAT函数会四舍五入之后返回一个以逗号分隔的字符串,所以导致出现了‘1,087.50’这样的数字,乍一看没有问题,事实上这个已经是字符串了,这才导致了mybatis转换时出现了异常。一般不报错因为这个字段一般比较小,导致这个字段不一定含有逗号,只要没有逗号,最终都会进行类型转换。

解决办法:
把FORMAT函数替换成ROUND即可 ,完美解决

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值