2011-01-21 2 views
1

SSISのDT_R8である整数を10進数に変更するにはどうすればよいですか?私は小数点を持っているものもあれば、変換しているExcelスプレッドシートにはないものもあります。 は、たとえば、私は次のことを持っていることがあります。SSISで10進数に整数を変更

8512 
8134.5 
8003.27 
7964.97 
7250 

同上彼らのためにのようにすべてにこれを読んで:

8512.00 
8134.50 
8003.27 
7964.97 
7250.00 

アイブ氏は私の派生列でDT_DECIMAL,2を使用してみましたが、動作するようには思えません。次のように私はそれを持っている:(DT_DECIMAL,2)((DT_DECIMAL,2)[Debit Amt])

おかげ

+0

結果として何が得られているのですか、何のエラーが表示されていますか? – HLGEM

+0

@HLGEMこんにちは、私はクエリを実行すると私はすべての数値を10進数で取得しません。元のファイル8512の結果を取得しますが、8512.00に変更します。いくつかは小数点を持たないものもあれば、小数点の一部を持つものもあれば(例:1234.5である必要がありますが、1234.50である必要があります)私はエラーが発生していない変換だけでも私はそれが必要な方法を働くisnt。 – GabrielVa

+0

((DT_DECIMAL、2)[Debit Amt] * 1.000001)? – GabrielVa

答えて

0

私が正しく理解している場合、あなたの入力と出力は、Excelスプレッドシートです。

から:http://technet.microsoft.com/en-us/library/ms141683.aspx

データタイプ。 Excelドライバ は、限定されたデータセット の種類のみを認識します。たとえば、 のすべての数値列は、 (DT_R8)と解釈され、すべての文字列(メモ列以外の )は、 255文字のUnicode文字列 (DT_WSTR)と解釈されます。次のように統合サービスは Excelのデータ型をマップします。

数値 - だから、倍精度浮動 (DT_R8)

、私は連結し、唯一の解決策は、スプレッドシート内の文字列のようにそれを保存することだと思います右に必要な数だけゼロを設定します。ここでは、小数点以下3桁の精度を持つ派生列のコードを示します。

FINDSTRING((DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt],",",1) == 0 ? (DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt] + ",000" : (DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt] + REPLICATE("0",4 - LEN(SUBSTRING((DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt],FINDSTRING((DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt],",",1),LEN((DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt])))) 
関連する問題