避免 float SQL 转换过程中的精度损失

Avoid precision loss in Convert process for float SQL

我正在尝试保留列 coalesced_field_value 转换和合并 SQL 查询中的浮点值。我做不到。

我想要原样的值,没有额外的零 0

非常感谢任何帮助。

drop table #source
create table #source
(
    userid int NULL,
    fieldid int NULL,
    col1date date NULL,
    col3float float NULL,
    col3string nvarchar(4000) NULL,
)

insert into #source  
values (1,1,NULL,'1.3456786',NULL),
(1,1,NULL,'1.3456786789',NULL),
(1,2,'2020-01-01',NULL,NULL),
(2,1,NULL,NULL,'test')

select * from #source

select *,
    COALESCE(col3string, 
    CONVERT(nvarchar(4000), col1date),
    CONVERT(nvarchar(4000),  CAST(col3float AS decimal(18,14))))
    AS coalesced_field_value
FROM #source

userid  fieldid col1date      col3float         col3string   coalesced_field_value
1         1     NULL          1.3456786         NULL         1.34567860000000
1         1     NULL          1.3456786789      NULL         1.34567867890000
1         2     2020-01-01    NULL              NULL         2020-01-01
2         1     NULL          NULL              test         test

调用 CONVERT 时会添加尾随零,因为您没有将第三个参数传递给 CONVERT,它使用默认样式在 DECIMAL 和 VARCHAR 之间进行转换。

CONVERT 没有您正在寻找的 specific style,所以宁可使用 FORMAT 转换值,这样您可以直接控制样式字符串

SELECT *,
       COALESCE(col3string, 
       CONVERT(NVARCHAR(4000), col1date),
       FORMAT(col3float,'0.####################')) AS coalesced_field_value
FROM #source