我有一个带整数列的简单表:
# 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.2
,per the docs。)
这是一个错误吗? (经过版本5.5.10
和latest 5.6.24
测试。)
或者,是否有任何特定的技术理由为什么列不能用于round
的第二个参数?
我们如何让round
工作即使第二个参数中使用了哪些列?
答案 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;
(将我的评论添加为单独的答案,因为我没有足够的评论点......)