mysql统计函数round失效问题

mysql统计函数round失效问题

  • 目录
    • 1、问题
    • 2、找到原因
    • 3、解决办法
    • 4、类似问题欢迎品论区补充~

目录

1、问题

我的mysql版本为:8.1.0

我在mysql使用sum对数据统计后使用round函数进行四舍五入取整,发现像16.145这样的数字取小数后2位后是16.14而非16.15。

sql:
在这里插入图片描述
结果:
mysql统计函数round失效问题_第1张图片

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、类似问题欢迎品论区补充~

你可能感兴趣的:(mysql,数据库)