我遇到了一个问题,即在 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 回答
我真的不是个错误 . CONCAT只返回变量
Amount
的小数部分的长度,即5.(变量为10,5) .你可以做的是使用SUBSTRING函数来切断不必要的小数部分,如下所示: