[英]Change month name to month number in SSIS
我有一个有50列的源文件。 其中一列是TransDateTime
,其中的值格式为22-MAY-2017 02:31:15.00
。 现在在将此源文件加载到最终目标表之前,我希望将其转换为22-05-2017 02:31:15.00
格式,以便我可以使用该列的数据类型datetime
时间。
我已经看到了将月份名称转换为月号的方法,如果该列只包含月份值,如下所示。
在我的情况下,我不确定如何解决这种情况。 有解决方案吗
一个解决方案是REPLACE。 只需将“MAY”替换为“05”,您就可以从样本输入中获得所需的结果。
在一个表达式中嵌套12 REPLACE函数,您将处理每个可能的场景。
使用脚本组件。 在C#
中将输入列转换为所需的格式:
DateTime.Parse("22-MAY-2017 02:31:15.00").ToString("dd-MM-yyyy HH:mm:ss.ff");
例如,如果您的输入列是MyDate,而Out put列是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.