如何获得Round()的第二个参数来处理列?

时间:2015-04-28 06:55:53

标签: mysql sql debugging if-statement subquery

我有一个带整数列的简单表:

# setup table:
create table t(x int); insert t select 1;

查询select round(1.234, 1) from t按预期返回1.2

但是,select round(1.234, x) from t会返回1.2000。 (它应该返回1.2per the docs。)

这是一个错误吗? (经过版本5.5.10latest 5.6.24测试。)

或者,是否有任何特定的技术理由为什么列不能用于round的第二个参数?

我们如何让round工作即使第二个参数中使用了哪些列?

2 个答案:

答案 0 :(得分:1)

考虑使用FORMAT代替ROUND

mysql> SELECT FORMAT(1.234, x) FROM ( SELECT 1 AS x ) y;
+------------------+
| FORMAT(1.234, x) |
+------------------+
| 1.2              |
+------------------+

如果不满意,file a bug关于ROUND

答案 1 :(得分:0)

此错误不仅限于ROUND(),也适用于TRUNCATE()

@RickJames接受的答案/解决方法并不完全正确,因为FORMAT()引入了千位分隔符:FORMAT() documentation

纠正任意值的解决方法:

SELECT REPLACE(FORMAT(t.raw_number, t.decimal_places), ',', '')
FROM   my_table t;

(将我的评论添加为单独的答案,因为我没有足够的评论点......)