2012-07-24 51 views
1

我在ETL过程中工作,在表varchar中有一列,数据为28JUN1952。 这将始终采用此格式,即日期为2位数字,月份为3个字母,年份为4位数字。ETL中的数据转换SSIS

我能够将它转换成日期列,我需要这个来yyyyMMdd格式,即变成19520628。我可以将月份和日期分开,但如果月份是1位数字,则无法在本月添加填充。 JanFeb

是否有任何其他方式来转换数据格式或任何其他替代方法来添加填充?

我只需要在SSIS中进行转换。

+0

你能后你有这么远的公式? – 2012-07-24 07:09:25

回答

2

,最快的途径是增加一个脚本转换。

  1. 在输入和输出选项卡上,展开输出0,选择输出列,单击添加列。 2.将列重命名为ccyymmdd,并更改数据类型。我不确定你的目标类型是什么(int32,string?),但我会假设字符串,因为我很懒
  2. 在输入列选项卡上,选择字符串日期源列(假设它叫做srcDate)
  3. 里面的脚本任务,假设C#,使用这样的代码

内部脚本任务

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    DateTime x = DateTime.MinDate; 
    if (DateTime.TryParse(Row.srcDate, out x)) 
    { 
     Row.ccyymmdd = x.ToString("yyyyMMdd"); 
    } 
    else 
    { 
     // Handle NULL values however you wish 
     // Assign "known bad value" 
     // Row.ccyymmdd = "99991231"; 
     // Or set the null property to true (preferred) 
     Row.ccyymmdd_IsNull = true; 
    } 

} 
+0

太棒了。万分感谢。 – 2012-07-24 08:08:04

0

试试这个:

declare @d varchar(20)='28JAN1952'; 

SELECT replace(CONVERT(date,RIGHT(@d,4)+SUBSTRING(@d,3,3)+LEFT(@d,2)),'-','') 
+1

我无法在那里添加SQL命令。我需要一些SSIS转换。 – 2012-07-24 06:10:41