提问人:Rocky3151 提问时间:11/27/2020 最后编辑:Dale KRocky3151 更新时间:11/27/2020 访问量:481
避免浮点 SQL 的转换过程中的精度损失
Avoid precision loss in Convert process for float SQL
问:
我正在尝试在转换和合并 SQL 查询coalesced_field_value列中保留浮点值。我做不到。
我想要原样的值,没有多余的零的 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
答:
1赞
Ockert
11/27/2020
#1
调用 CONVERT 时会添加尾随零,因为您没有将第三个参数传递给 CONVERT,而是使用其默认样式在 DECIMAL 和 VARCHAR 之间进行转换。
CONVERT 没有您正在寻找的特定样式,因此请使用 FORMAT 强制转换值,这样您就可以直接控制样式字符串
SELECT *,
COALESCE(col3string,
CONVERT(NVARCHAR(4000), col1date),
FORMAT(col3float,'0.####################')) AS coalesced_field_value
FROM #source
评论