【问题标题】:Data Conversion In ETL SSISETL SSIS 中的数据转换
【发布时间】:2014-11-17 23:18:34
【问题描述】:

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

我能够将其转换为日期列,因为我需要它以 yyyyMMdd 格式出现,即 28JUN1952 变为 19520628。我可以拆分年份月份和日期,但如果月份是 1 位数月份,则无法在月份中添加填充,例如JanFeb

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

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

【问题讨论】:

  • 你能发布你目前的公式吗?

标签: sql-server ssis etl


【解决方案1】:

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

  1. 在输入和输出选项卡上,展开输出 0,选择输出列,单击添加列。 2. 将 Column 重命名为 ccyymmdd 并更改数据类型。我不确定你的目标类型是什么(int32,字符串?)但我会假设字符串,因为我很懒
  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;
    }

}

【讨论】:

    【解决方案2】:

    试试这个:

    declare @d varchar(20)='28JAN1952';
    
    SELECT replace(CONVERT(date,RIGHT(@d,4)+SUBSTRING(@d,3,3)+LEFT(@d,2)),'-','')
    

    【讨论】:

    • 我无法在此处添加 SQL 命令。我需要一些 SSIS 转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多