实测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 时间型

猜你喜欢

转载自blog.csdn.net/weixin_40096730/article/details/89215692