2016-10-03 46 views
0

我正在嘗試使用MS-SSIS 2012加載CSV文件。CSV中的日期格式爲:SSIS處理日期和空日期?

1900-12-12 
1987-01-23 
.. etc 

我寫這段代碼的日期從字符串轉換爲日期,然後修復空值(不是每行始終有一個日期)

(DT_DATE)(SUBSTRING(ISNULL(Geboortedatum) ? "1900-01-01" : Geboortedatum,1,4) + "-" + SUBSTRING(ISNULL(Geboortedatum) ? "1900-01-01" : Geboortedatum,6,2) + "-" + SUBSTRING(ISNULL(Geboortedatum) ? "1900-01-01" : Geboortedatum,9,2)) 

這種失敗。我原來是;

(DT_DATE)(SUBSTRING(Geboortedatum,1,4) + "-" + SUBSTRING(Geboortedatum,6,2) + "-" + SUBSTRING(Geboortedatum,9,2)) 

哪些工作正常,直到我在我的文件中獲得NULL值。有任何想法嗎?

+0

你可以發佈錯誤嗎? –

+0

[派生列[40]]錯誤:嘗試執行類型轉換時發生錯誤。 [派生列[40]]錯誤:SSIS錯誤代碼DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 「派生列」失敗,因爲發生了錯誤代碼0xC0049064,並且「派生Column.Outputs [派生列輸出] .Columns [Datumformat]」上的錯誤行處置指定錯誤失敗。指定組件的指定對象發生錯誤。在此之前可能會發布錯誤消息,提供有關失敗的更多信息。 –

回答

0

試試這個。稍微複雜一點,然後你的代碼稍快:)

(DT_DATE) (ISNULL(Geboortedatum) ? "1900-01-01" : (SUBSTRING(Geboortedatum,1,4) + "-" + SUBSTRING(Geboortedatum,6,2) + "-" + SUBSTRING(Geboortedatum,9,2))) 
+0

感謝您的幫助。我犯了同樣的錯誤。在我的CSV文件中,日期介於引號之間,例如; 「2015-01-01」,當它爲空時,顯示爲「」。難道這不被視爲「真正的」空值? –

+0

嘗試刪除平面文件連接管理器編輯中的文本限定符標記中的引號,將「 –

0

這樣做的工作..它似乎不是一個真正的空值。

(DT_DATE)(TRIM(Geboortedatum) == "" ? "1900-01-01" : (SUBSTRING(Geboortedatum,1,4) + "-" + SUBSTRING(Geboortedatum,6,2) + "-" + SUBSTRING(Geboortedatum,9,2)))