mysql直接使用sum(varchar)会导致出现结果出现小数位异常,需要使用cast()函数或者CONVERT()对数据进行格式化,具体如下
Cast(字段名 as 转换的类型 ),可以转换的类型是有限制的,其中类型可以为:
CHAR[(N)] 字符型 DATE 日期型 DATETIME 日期和时间型 DECIMAL float型 (DECIMAL (10,2)//设置精度) SIGNED int TIME 时间型
-
-- 错误
-
SELECT
-
SUM(price)
-
FROM
-
m_user
-
-- 正确
-
SELECT TRUNCATE
-
( SUM( u.price ), 2 )
-
FROM
-
m_user u;
-
-- 正确
-
SELECT
-
SUM(TRUNCATE( u.price , 2 ) )
-
FROM
-
m_user u;
-
-- 正确 但是和以上误差0.01
-
SELECT
-
sum(cast(price as decimal(18,2)))
-
FROM
-
m_user
标注:
1、TRUNCATE函数将expr按照int_expr长度在小数点后按照位数直接进行截取。
实例:SELECT TRUNCATE(200.12567,4); 输出结果:200.1256
2、ROUND函数将expr按照int_expr长度在小数点后按照位数进行四舍五入截取。
实例:SELECT ROUND(200.12567,4); 输出结果:200.1567
3、MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。
两者具体的语法如下: CAST(value as type); CONVERT(value, type); 就是CAST(xxx AS 类型), CONVERT(xxx,类型)。