ETL SSIS中的数据转换

时间:2012-07-24 03:38:23

标签: sql-server ssis etl

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

我能够将此转换为日期列,我需要将其转换为yyyyMMdd格式,即28JUN1952成为19520628。我能够将年份和日期分开,但如果月份为1个月,则无法在月份中添加填充。 JanFeb

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

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

2 个答案:

答案 0 :(得分:2)

最简单的方法是添加脚本转换。

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

    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;
        }
    
    }
    

答案 1 :(得分:0)

试试这个:

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

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