我有一个包含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任务运行。最后,将数据从登台表推送到目的地。 –