在CONCAT中,带有小数点列的MySQL ROUND无法按预期工作

时间:2018-09-09 22:44:10

标签: mysql sql

我遇到了一个问题,当在ROUND()函数中使用CONCAT()函数时,我没有得到预期的小数位数输出。

我在此SQL Fiddle

中简化并复制了该问题

示例数据库创建和数据输入代码(来自sqlfiddle):

CREATE TABLE `test` ( `Amount` DECIMAL(10,5) NOT NULL , `Decimals` SMALLINT(6) NOT NULL ) ENGINE = InnoDB;

INSERT INTO test (Amount, Decimals) VALUES
(100.12345, 1),
(100.12345, 2),
(100.12345, 3);

查询以重现该问题:

SELECT CONCAT(ROUND(`Amount`, Decimals), ' ')  FROM test

所有行输出的小数点后5位。

此查询产生正确的结果:

SELECT ROUND(`Amount`, Decimals) FROM test

我认为我发现了一个错误?如果是这样,在此期间我还能使用其他解决方法吗?在我的真实示例中,我需要将四舍五入到指定小数点的仪表读数与单位文本(例如小时,英里)连接起来。我对该部分的实际SQL如下所示:

CONCAT(ROUND(`MeterInstances`.`Reading`, `Meters`.`DecimalPlaces`), ' ', `Meters`.`Units`)

1 个答案:

答案 0 :(得分:1)

我不认为这确实是一个错误。 CONCAT只是返回变量Amount小数部分的长度,即5。(变量为10,5)。

您可以做的是使用SUBSTRING函数截去不必要的小数部分,如下所示:

SELECT CONCAT(SUBSTRING(ROUND(`Amount`, Decimals), 1, LENGTH(`Amount`)-5+`Decimals`), ' ') FROM test