SSIS导入XML至SQL Server如何去除decimal列尾部多余零
SQL Server decimal字段去除尾部零解决方案
首先明确:decimal 是数值存储类型,本身会按照定义的精度保留小数位,你看到的尾部零属于数值转字符串展示时的格式化问题,可根据需求选择以下两种方案实现:
方案1:持久化存储无尾部零的结果
如果需要数据库里存储的就是处理后的结果,需要将字段从decimal类型改为字符串类型存储,因为数值类型无法做到不保留定义精度的尾部零。
操作步骤:
- 修改表结构,将目标字段修改为合适长度的varchar类型,例如:
ALTER TABLE dbo.XML_DATATYPE_TEST1 ALTER COLUMN QUANTITY VARCHAR(20)
- 执行数据格式化更新:
UPDATE dbo.XML_DATATYPE_TEST1 SET QUANTITY = FORMAT(CAST(QUANTITY AS DECIMAL(18,10)), '0.####################')
如果想在SSIS导入阶段就完成转换,可以在数据流任务中添加派生列,使用以下表达式直接生成格式化后的字符串存入表:
(DT_WSTR,20)ROUND(QUANTITY,10) == (DT_WSTR,20)(DT_I8)ROUND(QUANTITY,10) ? (DT_WSTR,20)(DT_I8)ROUND(QUANTITY,10) : (DT_WSTR,20)ROUND(QUANTITY,10)
方案2:保留原decimal存储,新增计算列实现默认格式化展示
如果不想修改原有存储结构,还需要保留数值类型做计算,可新增持久化计算列,查询时直接取计算列即可得到无尾部零的结果:
ALTER TABLE dbo.XML_DATATYPE_TEST1 ADD QUANTITY_DISPLAY AS FORMAT(QUANTITY, '0.####################') PERSISTED
注意事项
不要使用转float的方式处理,float为近似数值类型,处理高精度数值时会出现精度丢失问题,使用FORMAT函数格式化更稳定。
内容的提问来源于stack exchange,提问作者TheAlchemist
相关产品推荐
相关产品推荐

