mysql统计函数round失效问题

2023-12-22 13:49:07

目录

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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。