Sql server ETL SSIS中的数据转换

Sql server ETL SSIS中的数据转换,sql-server,ssis,etl,Sql Server,Ssis,Etl,我在ETL过程中工作,在varchar表中有一列,数据为1952年6月28日。 这将始终采用这种格式,即2位数字表示日期,3个字母表示月份,4个数字表示年份 我能够将其转换为日期列,因为我需要它采用yyyyMMdd格式,即1952年6月28日变成19520628。我可以拆分年、月和日期,但如果月份是1位数的月份,则无法在月份中添加填充,例如Jan或Feb 是否有其他方法转换数据格式或添加填充的其他替代方法 我只需要在SSIS中进行转换。尝试以下操作: declare @d varchar(20)

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

我能够将其转换为日期列,因为我需要它采用
yyyyMMdd
格式,即
1952年6月28日
变成
19520628
。我可以拆分年、月和日期,但如果月份是1位数的月份,则无法在月份中添加填充,例如
Jan
Feb

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

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

尝试以下操作:

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

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

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

  • 在“输入和输出”选项卡上,展开“输出0”,选择“输出列”,然后单击“添加列”。2.将列重命名为ccyymmdd之类的名称,并更改数据类型。我不确定您的目标类型是什么(int32,string?),但我会假设string是懒惰的
  • 在“输入列”选项卡上,选择字符串“日期”源列(假定该列名为srcDate)
  • 在脚本任务中,假设使用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;
        }
    
    }
    

    我无法在那里添加SQL命令。我需要一些SSIS转换。你能发布你到目前为止的公式吗?