2017-05-31 276 views
3

我有一個包含50列的源文件。其中一列爲TransDateTime,其中的值爲格式22-MAY-2017 02:31:15.00。現在,在將此源文件加載到最終目標表之前,我希望將其轉換爲格式22-05-2017 02:31:15.00,以便我可以使用該列的數據類型datetime將月份名稱更改爲SSIS中的月份編號

我已經看到如果該列只包含像下面這樣的月份值,將月份名稱轉換爲月份編號的方法。

我不知道如何解決這個場景在我的情況。任何解決方案

+0

您是否使用SSIS加載數據(如示例中所示)?或者你正在尋找通過查詢的方式? –

+0

我正在使用ssis數據流任務 –

+0

我會這樣做:使用SSIS將源數據推入臨時表,raw。然後編寫一個查詢來解析兩條破折號之間的所有日期(可能使用CHARINDEX),並用數字等值替換,然後重新格式化日期。將其作爲執行SQL任務運行。最後,將數據從登臺表推送到目的地。 –

回答

2

那麼一個解決方案是替換。只需將「MAY」替換爲「05」,即可從樣本輸入中獲得理想的結果。

在一個表達式中嵌套12 REPLACE函數,您將處理每種可能的情況。

2

使用腳本組件。將輸入欄這樣你想要的格式在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"); 

你可以check the code here

1

如果您的目標列數據類型爲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