删除SSIS中的前导零

时间:2012-03-08 08:46:31

标签: ssis sql-server-2008-r2 trim dts leading-zero

在将数据导入SQL Server 2008数据库之前,我使用SSIS处理来自旧系统的数据。 货币字段的格式如下:

000000xxx.xx

我需要删除前导零。请注意,实际货币值没有固定的数字位数。所以,例如,它可能是xxxxx.xx或x.xx或xxxxxxxxxxx.xx

我发现了这个answer,但派生列工具只显示有限的字符串函数,比如Access公式向导。

所以我的问题:

  • 如何在DTS派生列工具中使用PATINDEX
  • 否则,如何从输入列中删除前导零

2 个答案:

答案 0 :(得分:1)

你是如何查询数据的?我想你在OleDBSource组件上使用直接表访问,对吧?我不建议这样做,因为桌子上的微小变化可能会破坏你的包裹。

我想要一个包含源表中的select的视图,在这个select上我会使用PATINDEX函数,在包中,我会选择视图而不是表。

这是一个很好的方法,因为如果你需要做一个小改动,你可以改变视图而不是包

如果你不想写一个视图,那很好,而不是选择“数据访问模式”=“表或视图”,选择“sql命令”并直接在包上编写你的sql。

答案 1 :(得分:0)

您是否无法将数据转换为源系统中的数字等效类型?这应该是放弃前导零的快速方法。 SELECT CAST(myCurrency AS decimal(18,2)) AS leadingZerosDropped FROM myTable

否则,死的简单SSIS方法是使用数据转换任务并将其强制转换为数字类型(DT_CY / Currency或DT_Numeric / Numeric工作正常)

来源查询

SELECT '000000111.11' AS stringCurrency
UNION ALL SELECT '0.22'
UNION ALL SELECT '03.33'
UNION ALL SELECT '004.44'
UNION ALL SELECT '0005.55'
UNION ALL SELECT '00000000000000000006.66'

数据转换转换

我创建了一个新列currencyCurrency,它是应用了货币[DT_CY]数据类型的stringCurrency。

结果

stringCurrency            currencyCurrency
000000111.11              111.11
0.22                      0.22
03.33                     3.33
004.44                    4.44
0005.55                   5.55
00000000000000000006.66   6.66

我完全支持不使用表格访问模式,一般情况下我赞成将工作推送到源系统上,但如果源系统不允许转换或者你不得不求助于用字符串捣乱。