问题缘由:mysql formt函数会对数字进行每3位加一个逗号
例如:一个数 10000000
使用format函数格式化后会变成 10,000,000
问题描述:当某个表有一个金额列 money 类型为 decimal(12,5) , 此时页面上须要展现3位小数,合计列也是如此,这是 用 format(money,3) 格式化每一列都正常, 可是统计总计的时候就出问题了 ,sum(format 过的金额列) 算出的金额(在某一列金额超过3位数的时候format 会给其添加逗号,会出现问题 就会很离谱)mysql
id | name | money |
1 | 苹果 | 5.00000 |
2 | 小米手机 | 1999.99000 |
3 | 李子 | 3.00000 |
SELECT id,NAME,FORMAT(money,3) money FROM test
id | name | money |
1 | 苹果 | 5.000 |
2 | 小米手机 | 1,999.990 |
3 | 李子 | 3.000 |
SELECT SUM(money) FROM (SELECT id,NAME,FORMAT(money,3) money FROM test ) t
sum(money) |
9 |
经过上述例子,说明 format 函数最好只在进行合计列计算后展现的时候格式化使用,否则会出现很大的问题,直接将精度算没了sql
通常数字的转换和格式化,仍是建议使用以下方法,不会对数字进行加逗号处理
convert(列名, 数据类型如:decimal(12,2))
cast(列名 as 数据类型如:decimal(12,2))
ROUND(列名或值,精度)
函数