我需要在多个字段(文本和数字)之间连接,并且它必须准确。有些字段最初是数字(19,6),我需要它的小数点后只有 2 位数字。
我正在使用以下查询,如果我运行 no。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
Run Code Online (Sandbox Code Playgroud)
好的,SQL Server 在将浮点值转换为字符串时做了一些假设。这应该不足为奇。数据库无法打印出小数点后无限位数。
因此,有两个简单的选择:转换为十进制或使用str():
select concat(cast(38156.650000 as decimal(10, 2)) . . .
Run Code Online (Sandbox Code Playgroud)
或者
select concat(str(38156.650000, 10, 2) . . .
Run Code Online (Sandbox Code Playgroud)
注意:第一个版本是 SQL 标准,应该适用于任何数据库。