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

时间:2017-05-31 17:34:57

标签: sql sql-server types ssis etl

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

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

我不知道如何在我的情况下解决这个问题。任何解决方案?

3 个答案:

答案 0 :(得分:2)

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

在一个表达式中嵌套12个REPLACE函数,您将处理每个可能的场景。

答案 1 :(得分:2)

使用脚本组件。在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");

你可以check the code here

答案 2 :(得分:1)

如果您的目标列数据类型为Script COmponent,那么您不希望重新格式化日期字符串。但是您希望将此字符串转换为日期值。

您可以在数据流任务中添加DT_DBTIMESTAMP,其输出列的类型为TransDateTime,并将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 列标记为输入。并使用以下代码:(我使用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 ,并且必须使用以下代码:

<ul class='custom-menu'>
  <li data-action="first">First thing</li>
  <li data-action="second">Second thing</li>
  <li data-action="third">Third thing</li>
</ul>

 $(".custom-menu ul:last").append('<li> hey test ...</li>');
 //$(".custom-menu ul").append('<li> hey test ...</li>');
 console.log($('.custom-menu').html());