2015-11-04 31 views
0

我試圖將字符串列[mydate]轉換爲日期,並且我想使用Derived Column Transformation。問題是這樣的,我的日期就像'1/10/2015','1/1/2015','11/1/2015''11/9/2015'。所以格式可以在D/MM/YYYY,D/M/YYYY,DD/M/YYYYDD/MM/YYYY之間變化。SSIS - 將未格式化的字符串日期轉換爲YYYY-MM-DD

你能指導我創建Derived Column Transformation的表達式嗎?

我試圖用這樣的:

(DT_DATE)(ISNULL([mydate]) == FALSE ? (RIGHT([mydate],4) + "-" + "2" + "-" + LEFT([mydate],1)) : [mydate]) 
+0

變化在平面文件源,而不是試圖把它轉換aftewards字段類型。您*可以*指定特定字段是具有特定格式的日期。 BTW日期沒有格式,它們是二進制值。你不需要將它們轉換爲'yyyy-MM-dd',如果你打算使用它們並將它們作爲日期存儲的話 –

+0

我嘗試初始化,但是這裏的問題在於SQL保存了這樣的日期 2015-10 -30 < - 平面文件源是2015年10月30日 2015-03-11 < - 平面文件源是3/11/2015 它交換了月份和日期(因爲我的服務器機器設置爲使用MM/DD/YYYY) 你知道原因嗎 – Asim

+0

什麼問題?如果你不解釋問題的實際是什麼,這是不可能的。 –

回答

0

這個任務是相當棘手的,因爲我們不是隻處理格式化字符串日期,但他們也沒有在該地區netural YYYY-MM-DD格式。

爲了解決這個問題,我們可以使用follwing表達了Derived Column

RIGHT([mydate],4) + "/" + SUBSTRING([mydate],FINDSTRING([mydate],"/",1) + 1,FINDSTRING([mydate],"/",2) - FINDSTRING([mydate],"/",1) - 1) + "/" + SUBSTRING([mydate],1,FINDSTRING([mydate],"/",1) - 1) 

的表達是很長,但它是什麼做的是正斜槓之間取值(月,日,年) /並將它們連接成類似於YYYY/MM/DD的格式,然後可以使用Data Conversion轉換在SSIS中轉換它們。這避免了在諸如1/1/200010/10/2000等日期處理長度變化的錯誤。

派生列的輸出被命名爲YYYYMMDD,然後將該值傳遞到輸出爲Date Converted YYYYMMDDData Conversion轉換中,如下所示。

date conversion from improper string into proper date

Data Conversion任務只是做follwing:

data conversion task of converted date

+0

偉大的工作!謝謝 – Asim

相關問題