[英]MySQL ROUND with column for decimals not working as expected when inside CONCAT
我在使用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`)
我不认为这确实是一个错误。 CONCAT只是返回变量Amount
的小数部分的长度,即5。(变量为10,5)。
您可以做的是使用SUBSTRING函数截去不必要的小数部分,如下所示:
SELECT CONCAT(SUBSTRING(ROUND(`Amount`, Decimals), 1, LENGTH(`Amount`)-5+`Decimals`), ' ') FROM test
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.