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

Sql 将SSIS中的月份名称更改为月份编号,sql,sql-server,types,ssis,etl,Sql,Sql Server,Types,Ssis,Etl,我有一个有50列的源文件。其中一列为TransDateTime,其中的值格式为2017年5月22日02:31:15.00。现在,在将此源文件加载到最终目标表之前,我希望将其转换为格式22-05-2017 02:31:15.00,以便我可以对该列使用数据类型datetime 我已经看到了将月份名称转换为月份编号的方法,如果该列只包含如下所示的月份值 在我的案例中,我不确定如何解决这个问题。有什么解决方案吗?有一个解决方案是更换。只需将“MAY”替换为“05”,您就可以从示例输入中获得所需的结

我有一个有50列的源文件。其中一列为
TransDateTime
,其中的值格式为
2017年5月22日02:31:15.00
。现在,在将此源文件加载到最终目标表之前,我希望将其转换为格式
22-05-2017 02:31:15.00
,以便我可以对该列使用数据类型
datetime

我已经看到了将月份名称转换为月份编号的方法,如果该列只包含如下所示的月份值


在我的案例中,我不确定如何解决这个问题。有什么解决方案吗?

有一个解决方案是更换。只需将“MAY”替换为“05”,您就可以从示例输入中获得所需的结果


在一个表达式中嵌套12个替换函数,您将处理所有可能的情况。

使用脚本组件。将输入列转换为所需格式,如
C#
中所示:

例如,如果输入列为MyDate,输出列为OutPutCol,则:

OutPutCol = DateTime.Parse(Row.MyDate).ToString("dd-MM-yyyy HH:mm:ss.ff");

如果目标列数据类型为日期时间,则可以。

,因此不希望重新格式化日期字符串。但您希望将此字符串转换为日期值

您可以在数据流任务中添加
脚本组件
,输出列的类型为
DT_-DBTIMESTAMP
,并将
TransDateTime
列标记为输入。并使用以下代码:(我使用的是VB.NET)


如果目标列的类型为字符串,则必须遵循相同的步骤,但输出列的类型应为
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 

您是否使用SSI加载数据(如示例中所示)?或者您正在寻找一种通过查询的方法?我正在使用ssis数据流任务我会这样做:使用ssis将源数据推送到暂存表中。然后编写一个查询来解析两个破折号之间的日期(可能使用CHARINDEX)并替换为等效的数字,然后重新格式化日期。将其作为执行SQL任务运行。最后,将数据从暂存表推送到目标。
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 
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