1

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`)
4

1 回答 1

1

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

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

SELECT CONCAT(SUBSTRING(ROUND(`Amount`, Decimals), 1, LENGTH(`Amount`)-5+`Decimals`), ' ') FROM test
于 2018-09-09T22:56:56.303 回答