在 MySQL 中,我正在尝试类似下面的查询,但没有得到想要的结果:
SELECT ROUND(t.price / t.qty, IF(qty > 1, 4, 2)) AS unit_cost
FROM (
SELECT 0.10 AS price, 1 AS qty
UNION
SELECT 2.60 AS price, 25 AS qty
) t
我想要的是:
+-----------+
| unit_cost |
+-----------+
| 0.10 |
| 0.1040 |
+-----------+
但由于某种原因,结果是:
+-----------+
| unit_cost |
+-----------+
| 0.100000 |
| 0.104000 |
+-----------+
奇怪的是,这有效:
SELECT ROUND(0.10000, IF (1=1, 2, 4));
所以我知道条件舍入是可能的。我怎样才能达到预期的结果集?
尝试使用FORMAT()
我认为,如果没有确凿的证据,
ROUND()
除非它是一个整数文字,否则它会忽略第二个参数。这是一种解决方法:
如果您需要超过 2 种情况,请考虑使用
CASE
表达式。随意在 bugs.mysql.com 提交错误报告,请求
ROUND()
允许表达式作为第二个参数,或者文档状态相反。