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'

データ変換変換

通貨 [DT_CY] のデータ型が適用された stringCurrency である currencyCurrency という新しい列を作成しました。

結果

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 に答える