I process data from a legacy system with SSIS before importing data into a SQL Server 2008 db. A currency field is so formatted:

000000xxx.xx

I need to remove the leading zeros. Note that the actual currency value has not a fixed number of digit. So, for instance, it could be xxxxx.xx or x.xx or xxxxxxxxxxx.xx

I found this answer, but the derived column tool display only limited string functions, like the Access formula wizard.

So my question:

  • how may I use PATINDEX in the DTS derived column tool
  • otherwise, how may I remove leading zeros from input column
有帮助吗?

解决方案

how are you querying the data? I suppose you are using direct table access on your OleDBSource component, right? I do not advise that because a tiny change on the table may break your package.

I would right a view containing the select from your source table and on this select I would use the PATINDEX function and inside the package, I would select the view instead of the table.

This is a good approach because if you need to do a minor change, you can change the view instead of the package

If you dont want to write a view, fine, instead of selecting "data access mode" = "table or view", select "sql command" and write your sql directly on the package.

其他提示

Are you not able to cast the data into a numeric equivalent type in the source system? That should be a quick way to drop the leading zeros. SELECT CAST(myCurrency AS decimal(18,2)) AS leadingZerosDropped FROM myTable

Otherwise, the dead simple SSIS way to do it is to use a Data Conversion task and cast it to a numeric type (DT_CY/Currency or DT_Numeric/Numeric worked just fine)

Source query

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'

Data Conversion transformation

I created a new column, currencyCurrency which was the stringCurrency with a data type of currency [DT_CY] applied.

Results

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

I fully support not using table access mode and in general I'm in favor of pushing work onto the source system but this seems like a low effort if the source system doesn't allow for conversion or if you have to resort to mucking about with strings.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top