mysql在concat中使用列进行小数取整时未按预期工作

ozxc1zmp  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(445)

我遇到了一个问题,在使用 ROUND() 在一个 CONCAT() 功能。
我简化并复制了这个问题
示例数据库创建和数据输入代码(来自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

我想我发现了窃听器?如果是这样的话,在此期间,我是否可以使用其他可以正常工作的解决方法?在我的实际例子中,我需要将四舍五入到指定小数的 Jmeter 读数与单位文本(例如小时、英里)连接起来。我对该部分的实际sql如下所示:

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

9gm1akwq1#

我不认为这是一个真正的错误。concat只返回变量小数部分的长度 Amount ,也就是5(变量为10,5)。
您可以使用substring函数来删除不必要的小数部分,如下所示:

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

相关问题