在将数据导入SQL Server 2008数据库之前,我使用SSIS处理来自旧系统的数据。 货币字段的格式如下:
000000xxx.xx
我需要删除前导零。请注意,实际货币值没有固定的数字位数。所以,例如,它可能是xxxxx.xx或x.xx或xxxxxxxxxxx.xx
我发现了这个answer,但派生列工具只显示有限的字符串函数,比如Access公式向导。
所以我的问题:
答案 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
我完全支持不使用表格访问模式,一般情况下我赞成将工作推送到源系统上,但如果源系统不允许转换或者你不得不求助于用字符串捣乱。