我有一個包含50列的源文件。其中一列爲TransDateTime
,其中的值爲格式22-MAY-2017 02:31:15.00
。現在,在將此源文件加載到最終目標表之前,我希望將其轉換爲格式22-05-2017 02:31:15.00
,以便我可以使用該列的數據類型datetime
。將月份名稱更改爲SSIS中的月份編號
我已經看到如果該列只包含像下面這樣的月份值,將月份名稱轉換爲月份編號的方法。
我不知道如何解決這個場景在我的情況。任何解決方案
我有一個包含50列的源文件。其中一列爲TransDateTime
,其中的值爲格式22-MAY-2017 02:31:15.00
。現在,在將此源文件加載到最終目標表之前,我希望將其轉換爲格式22-05-2017 02:31:15.00
,以便我可以使用該列的數據類型datetime
。將月份名稱更改爲SSIS中的月份編號
我已經看到如果該列只包含像下面這樣的月份值,將月份名稱轉換爲月份編號的方法。
我不知道如何解決這個場景在我的情況。任何解決方案
那麼一個解決方案是替換。只需將「MAY」替換爲「05」,即可從樣本輸入中獲得理想的結果。
在一個表達式中嵌套12 REPLACE函數,您將處理每種可能的情況。
使用腳本組件。將輸入欄這樣你想要的格式在C#
:
DateTime.Parse("22-MAY-2017 02:31:15.00").ToString("dd-MM-yyyy HH:mm:ss.ff");
例如,如果你輸入列指明MyDate和Out把列OutPutCol則:
OutPutCol = DateTime.Parse(Row.MyDate).ToString("dd-MM-yyyy HH:mm:ss.ff");
如果您的目標列數據類型爲datetime
,那麼您不打算重新格式化日期字符串。但您正在尋找將此字符串轉換爲日期值。
您可以在數據流任務中添加Script COmponent
,輸出列爲DT_DBTIMESTAMP
,標記爲TransDateTime
列作爲輸入。並使用下面的代碼:(我用VB.NET)
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Output0Buffer)
Row.OutDate = DateTime.ParseExact(Row.TransDateTime,"dd-MMM-yyyy HH:mm:ss.ff",New System.Globalization.CultureInfo("en-GB"))
End Sub
如果你的目標列的類型是字符串,那麼你必須按照同樣的步驟,但輸出列應該是DT_STR
類型的,你有使用以下代碼:
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Output0Buffer)
Row.OutDate = DateTime.ParseExact(Row.TransDateTime,"dd-MMM-yyyy HH:mm:ss.ff",New System.Globalization.CultureInfo("en-GB")).ToString("dd-MM-yyyy HH:mm:ss.ff")
End Sub
您是否使用SSIS加載數據(如示例中所示)?或者你正在尋找通過查詢的方式? –
我正在使用ssis數據流任務 –
我會這樣做:使用SSIS將源數據推入臨時表,raw。然後編寫一個查詢來解析兩條破折號之間的所有日期(可能使用CHARINDEX),並用數字等值替換,然後重新格式化日期。將其作爲執行SQL任務運行。最後,將數據從登臺表推送到目的地。 –