使用float连接char时,SQL CONCAT会切断最后的数字

时间:2018-04-21 10:21:48

标签: sql sql-server sql-server-2012

我有这样一张桌子:

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),那么它的效果非常好。有没有改变数据类型的解决方案?

2 个答案:

答案 0 :(得分:1)

以下是使用format函数

的一种方法
SELECT CONCAT(rtrim(POS1), '_', rtrim(format(pos2, '#.####'))) AS POS1_POS2
FROM TABLE1

答案 1 :(得分:0)

评论太长了。

  

是否有解决方案可以在不更改数据类型的情况下运行?

你显然不明白浮点数和小数点之间的区别。您存储的值不完全是您看到的值。因此,正确的解决方案是更改表中的数据类型。

Format()确实解决了问题,特别是能够消除尾随零。但是,它是一个总近似值,因此容易出错。

您应该将值存储为小数 - 因为它们十进制值而不是浮点值。