2012-12-06 130 views
3

從具有包含年份和月份的列的平面文件中以下列格式讀取 - >「201212」。SSIS派生列表達式

我需要將其插入到DATETIME2列中,但首先我必須用「/」來解析它,並在當天添加「01」。這樣201212將成爲2012年12月1日

我在我的派生列轉換表達式如下:

(DT_DBTIMESTAMP2,0)((DT_WSTR,4)SUBSTRING(RptMthDTM,1,4) + "/" + (DT_WSTR,2)SUBSTRING(RptMthDTM,5,2) + "/" + "01") 

這看起來像它應該工作,SSIS接受這個(在它能夠解析表達式),但是在運行包時它會拋出一個完全無用的錯誤「嘗試執行類型轉換時發生錯誤。」以及它有錯誤的列。

我沒有建立這個軟件包,它在我身上被仿製掉,我被告知讓它工作。

在此先感謝interwebs家族。

+0

「201212」是否準確?或者應該是'20121212'(YYYYMMDD)? – billinkc

+0

y 201212是準確的。爲什麼他們只是想存儲這個月沒有一天我不知道 – swegs

回答

2

DT_DBTIMESTAMP2只能從一個特定的字符串格式轉換:yyyy-mm-dd hh:mm:ss[.fffffff]

可以使用此表達式來代替:

(DT_DBTIMESTAMP2,0)((DT_WSTR,4)SUBSTRING(RptMthDTM,1,4) + "-" + (DT_WSTR,2)SUBSTRING(RptMthDTM,5,2) + "-" + "01 00:00:00") 

更多細節: [http://msdn.microsoft.com/en -us/library/ms141036.aspx] [1]

+0

謝謝先生。我確實檢查了一下,以確保我可以在兩者之間進行轉換,但不會因爲我選擇使用「/」而不是「 - 」而導致失敗。 – swegs