实测MySQL 查询结果保留两位小数函数的区别汇总
MySQL查询结果保留两位小数常用的几个函数的区别,使用场景。
1、随机函数format(x,d)
2、格式化小数函数format(x,d)
例如:
select format(23456.789,2);
# 或
select formate(salary,2);
输出:23,456.79
实测:
原表部分信息:
SQL语句:
SELECT
客户,
format(
sum(
结算金额
) / 10000,
2
) AS 总结算金额
FROM
销售表2019
GROUP BY
客户
ORDER BY
总结算金额 DESC
结果:
总结:结果成功保留两位小数,但是排序不起作用了!
查看文档:Formats the number X to a format like '#,###,###.##', rounded to D decimal places, and returns the result as a string. If D is 0, the result has no decimal point or fractional part.整数部分超过三位的时候以逗号分割,并且返回的结果是string类型的。
3、截取函数truncate(x,d)
select truncate(23456.789,2);
# 或
select truncate(salary,2);
输出:23456.78
truncate()函数会将小数部分2位以后的值直接舍去。
4、类型转换函数convert(expr,type)
select convert(23456.789,decimal(10,2));
#或
select convert(salary,decimal(10,2));
输出:23456.79
convert()函数会对小数部分进行四舍五入操作,解释一下decimal(10,2),它表示最终得到的结果整数部分位数加上小数部分位数小于等于10,小数部分位数2。
实操中发现Navicat自动将语句转换成了:
cast((sum(结算金额) / 10000) as decimal(10,2))
原表部分信息:
完整代码:
SELECT
客户,
cast(
(
sum(
结算金额
) / 10000
) AS DECIMAL (10, 2)
) AS 总结算金额
FROM
销售表2019
GROUP BY
客户
ORDER BY
总结算金额
DESC
输出结果:
总结:结果成功保留两位小数,排序也正常!
5.CAST函数语法规则是:Cast(字段名 as 转换的类型 )
其中类型可以为:
CHAR[(N)] 字符型
DATE 日期型
DATETIME 日期和时间型
DECIMAL float型
SIGNED int
TIME 时间型