2013-01-04 57 views
1

我有一個平面文件,我正在使用SSIS包導入到SQL Server 2008中。將字符串轉換爲SSIS包中的十進制值

當前面的列值爲負時,文件包含一個帶數字的字段,後面跟着一個帶負號的列。

例如:

Price Sign 
----- ----- 
9212.00 
    29.01 - 
268.00 - 
453.02 

我想這個值加載到一個表上的小數列。

爲了做到這一點,我在我的數據流任務中創建了派生列。派生列的表達式是[Sign] + [Price]。我有(使用高級編輯器)將派生列定義爲類型十進制[DT_DECIMAL]

然後,我只是將數據(以及派生列)加載到我的表中。

這聽起來像是處理這種情況的好方法嗎?我應該考慮另一種方法嗎?使用這種方法的任何'陷阱'?

謝謝。

回答

1

你的做法似乎是最好的選擇。平面文件中每列的默認數據類型都是字符串。所以,你的[Sign] + [Price]表達式正在做字符串連接。而且,移動到輸出列時,數據會隱式轉換爲十進制值。

改善可讀性的一項改變是將字符串值明確地轉換爲小數。您可以在派生列成分改變你的表達是:

(DT_DECIMAL, scale)[Sign] + [Price] 

其中scale是一個數字,將匹配您的輸出列的數據類型。

通過此更改,派生列組件的輸出將是十進制數據類型。

1

也許這是不行的......

  1. 您需要Sign轉換爲字符串數據類型和Price爲數字。
  2. 然後比較Sign是否爲"-",如果是,則從-1開始倍數。

派生列代碼示例:

(DT_WSTR, 1) [Sign]=="-"? [Price]*-1 : [Price] 

enter image description here

+0

感謝您的信息。 你能解釋爲什麼我上面的方法不起作用嗎?根據我所看到的,它似乎確實有效。 – user1949225

+0

例如(對不起,不能發佈圖像):Derived Column Name Derived Column Expression Data Type ------------------- -------------- ---------- --------- Final_Price [sign]+[price] decimal[DT_DECI因此:Price = 232.43 Sign = - 變成-232.43,當我加載到我的數據庫時,這個值進入定義爲十進制(10,2)的表格中的列爲-232.43。只是想確保我理解第一種方法的好處。再次感謝。 – user1949225

+0

我看到了,但仍然不知道爲什麼這樣工作,因爲'Sign'數據類型必須是字符串,那麼您希望總和'Sign'字符串和'Price'小數,這不應該起作用。 http://sqlfiddle.com/#!3/d41d8/7527什麼數據類型是派生的'Sign'和'Price'列。 – Justin

相關問題