首页 文章

在CONCAT内部,带有小数列的MySQL ROUND不能按预期工作

提问于
浏览
0

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

我简化并复制了这个问题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 回答

  • 1

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

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

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

相关问题