繁体   English   中英

在SSIS中将月份名称更改为月份编号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM