sql-server - SISS - 将 DT_STR 转换为 DT_DECIMAL 的问题(小数部分变为整数部分编号)

标签 sql-server ssis type-conversion decimal etl

我在 VS 2015 上使用 SSIS,并使用 OLE DB 源和 OLE DB 目标(SQL Server 2017 上的表)进行测试。问题是源表我有一个字段 varchar(10) 类型,值是小数(记住这个字段是 varchar(10))。

enter image description here

TB_ 的值是:

enter image description here

在集成服务上,我使用了 OLE DB 源、数据转换和 OLE DB 目标。

enter image description here

在 Data Conversion Component 上,我将类型设置为数字(之后我尝试设置为十进制):

enter image description here

在 OLE DB 目标上,我映射了字段:

enter image description here

但是,当我执行包时,OLE DB 目标具有以下值:

enter image description here

CAMPO2 字段的正确值将是 4.51、20.5 和 98.54

结构表 OLE DB 目标是:

enter image description here

有什么建议吗?

最佳答案

问题原因

主要原因是小数点分隔符,varchar列包含逗号,而不是点

实验

如果我们尝试将以下文本转换为十进制 "1,2",结果为:

12.00

enter image description here

如果我们尝试将以下文本转换为十进制 "1.2",结果为:

1.20

enter image description here

解决方案

不使用数据转换转换,而是尝试使用具有以下表达式的派生列:

(DT_DECIMAL,2)REPLACE([CAMPO2],",",".") 

关于sql-server - SISS - 将 DT_STR 转换为 DT_DECIMAL 的问题(小数部分变为整数部分编号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101113/

相关文章:

sql-server - 如何在插入时从 Azure Sql 数据库获取通知

SQL:重复从开始日期到结束日期的记录

mysql - 查找另一个表中某一列的总值?(使用 join 或其他函数)

ssis - 使用 SSIS 发送有关错误的电子邮件通知

vb.net - VB.NET ArrayList到List(Of T)类型的复制/转换

c# - 从 float 到 double 并返回到 float 的转换不会丢失精度

sql-server - SQL Server 中的唯一行约束

SQL Server 2008 SSIS : Importing date field incorrectly (from Oracle)

sql-server - 如何在 SSIS 中插入新记录之前清空目标表?

sql - 转换 SQR 中的日期格式