Ssis 删除SSI中的前导零
在将数据导入SQL Server 2008 db之前,我使用SSIS处理遗留系统中的数据。 货币字段的格式如下:Ssis 删除SSI中的前导零,ssis,sql-server-2008-r2,trim,dts,leading-zero,Ssis,Sql Server 2008 R2,Trim,Dts,Leading Zero,在将数据导入SQL Server 2008 db之前,我使用SSIS处理遗留系统中的数据。 货币字段的格式如下: 000000xxx.xx 我需要删除前导零。请注意,实际货币值没有固定的位数。例如,它可以是xxxxx.xx或x.xx或xxxxxxxxxx.xx 我发现了这一点,但派生列工具仅显示有限的字符串函数,如访问公式向导 因此,我的问题是: 如何在DTS派生列工具中使用PATINDEX 否则,如何从输入列中删除前导零 您如何查询数据?我想您正在OleDBSource组件上使用直接表访问
000000xxx.xx
我需要删除前导零。请注意,实际货币值没有固定的位数。例如,它可以是xxxxx.xx或x.xx或xxxxxxxxxx.xx
我发现了这一点,但派生列工具仅显示有限的字符串函数,如访问公式向导
因此,我的问题是:
- 如何在DTS派生列工具中使用PATINDEX
- 否则,如何从输入列中删除前导零
如果您不想写入视图,可以选择“数据访问模式”=“表或视图”,而不是选择“sql命令”,然后直接在包上写入sql。您不能在源系统中将数据转换为数字等效类型吗?这应该是删除前导零的快速方法<代码>从myTable中选择CAST(我的货币为十进制(18,2))作为前导零 否则,简单的SSIS方法是使用数据转换任务并将其转换为数字类型(DT_CY/Currency或DT_numeric/numeric工作得很好) 源查询 数据转换 我创建了一个新列currencyCurrency,它是应用了currency[DT_CY]数据类型的stringCurrency 结果
我完全支持不使用表访问模式,一般来说,我赞成将工作推到源系统上,但如果源系统不允许转换,或者您不得不使用字符串,那么这似乎是一个很低的努力。我可能误解或误解了您的回答。我不认为视图可以解决这个问题,因为对视图的更改也会破坏数据流任务中的OLE DB源。但是没有任何东西会被破坏!他只有错误格式的数据。want Im建议在数据到达SSIS之前更正数据,这意味着使用视图获取数据,并在其中使用任何必要的方法将数据设置为必要的格式
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'
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