我有这样一张桌子:
CREATE TABLE TABLE1 (
POS1 char(4),
POS2 float)
INSERT INTO TABLE1
(POS1, POS2)
VALUES
('6000', 4518.6082),
('6000', 3451.23),
('5000', 341);
表格
POS1 POS2
6000 4518.6082
6000 3451.23
5000 341
我想将POS1和POS2与CONCAT
结合使用:
SELECT CONCAT(rtrim(POS1),'_',rtrim(POS2)) AS POS1_POS2
FROM TABLE1
不幸的是,我以某种方式"松散"数字(四舍五入)。的结果:
POS1_POS2
6000_4518.61
6000_3451.23
5000_341
如果我将CREATE TABLE语句中的float更改为numeric(10,4),那么它的效果非常好。有没有改变数据类型的解决方案?
答案 0 :(得分:1)
以下是使用format
函数
SELECT CONCAT(rtrim(POS1), '_', rtrim(format(pos2, '#.####'))) AS POS1_POS2
FROM TABLE1
答案 1 :(得分:0)
评论太长了。
是否有解决方案可以在不更改数据类型的情况下运行?
你显然不明白浮点数和小数点之间的区别。您存储的值不完全是您看到的值。因此,正确的解决方案是更改表中的数据类型。
Format()
确实解决了问题,特别是能够消除尾随零。但是,它是一个总近似值,因此容易出错。
您应该将值存储为小数 - 因为它们是十进制值而不是浮点值。