0

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

000000xxx.xx

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

我找到了这个答案,但派生列工具仅显示有限的字符串函数,例如 Access 公式向导。

所以我的问题:

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

2 回答 2

1

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

我会正确包含从源表中选择的视图,在此选择中我将使用 PATINDEX 函数,在包内,我将选择视图而不是表。

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

如果你不想写视图,没关系,而不是选择“数据访问模式”=“表或视图”,选择“sql命令”,直接在包上写你的sql。

于 2012-03-08T11:22:03.303 回答
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,它是 stringCurrency,应用了货币 [DT_CY] 的数据类型。

结果

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

我完全支持不使用表访问模式,总的来说,我赞成将工作推到源系统上,但如果源系统不允许转换或者你不得不求助于字符串。

于 2012-03-08T22:45:08.180 回答