mysql统计函数round失效问题
2023-12-22 13:49:07
mysql统计函数round失效问题
目录
1、问题
我的mysql版本为:8.1.0
我在mysql使用sum对数据统计后使用round函数进行四舍五入取整,发现像16.145这样的数字取小数后2位后是16.14而非16.15。
sql:
结果:
2、找到原因
发现score字段是字符串类型,于是我做了以下测试:
select round(16.125,2) from dual
执行结果为:16.13
select round('16.125',2) from dual
执行结果为:16.12
所以结论是:mysql隐式转换会有问题!
在设计表的时候,最好设置数字类型字段为DECIMAL,不然会导致后续的其他不可预料的问题!
3、解决办法
使用CAST函数对字符串进行手动转换
CAST语法为:
CAST(expression AS TYPE);
type 可以有:BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED
示例:
# 使用cast转换成DECIMAL并指定精度
select cast('16.125' as DECIMAL(10,8) ) as num
# 再使用ROUND四舍五入
select round(cast('16.125' as DECIMAL ),2) from dual
4、类似问题欢迎品论区补充~
文章来源:https://blog.csdn.net/weixin_42908843/article/details/135147285
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!