我需要在几个字段(文本和数字)之间连接,并且它必须准确。有些字段最初是数字(19,6),我需要它在小数点后只有2位数。
我使用以下查询,如果我没有运行。 1我在CONCAT_AMOUNT中得到一个如下四舍五入的数字:38156.738156.7和no。 2我说得对 - 476.47476.47。
为什么会发生这种情况?如何以最少的功能解决这个问题?
SELECT
38156.650000 AS AMOUNT,
CAST(38156.650000 as float),
CONCAT(cast(38156.650000 as float),
cast(38156.650000 as float)) AS CONCAT_AMOUNT
SELECT
467.47 AS AMOUNT,
CAST(467.47 as float),
CONCAT(cast(467.47 as float),
cast(467.47 as float)) AS CONCAT_AMOUNT
答案 0 :(得分:1)
好的,所以SQL Server在将浮点值转换为字符串时会做出一些假设。这不应该是令人惊讶的。数据库无法打印小数点后的无限位数。
所以,有两个简单的选择:转换为十进制或使用str()
:
select concat(cast(38156.650000 as decimal(10, 2)) . . .
或
select concat(str(38156.650000, 10, 2) . . .
注意:第一个版本是SQL标准,应该适用于任何数据库。