SSIS派生列转换编辑器中的表达式问题

时间:2016-01-27 12:10:53

标签: visual-studio ssis expression ssms

我需要将一列拆分为两列。列中的数据当前由短划线(见下文)拆分,并在文本之间加上括号。

列示例:(Data1) - (Data2)

我有一个查询,我使用的数据库是Works,但我在SSIS中创建此表达式时遇到问题。

以下是我在SSMS中使用的查询,它们生成没有短划线和括号的新列:

要将列左侧的数据转换为新列:

SELECT SUBSTRING(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'(',''),')',''),' ',''),0,CHARINDEX('-', 

REPLACE(REPLACE(REPLACE(COLUMN_NAME,'(',''),')',''),' ',''))) AS NEW_COLUMN_NAME

FROM TABLE

要将列右侧的数据放入新列:

SELECT SUBSTRING(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'(',''),')',''),' ',''),CHARINDEX('-', 

REPLACE(REPLACE(REPLACE(STREKNING_NAVN,'(',''),')',''),' ',''))+1,LEN(REPLACE(REPLACE(REPLACE(COLUMN_NAME,'(',''),')',''),' ',''))) AS NEW_COLUMN_NAME

FROM TABLE

任何人都可以提供任何提示吗?

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

我更喜欢用脚本任务来解决字符串操作问题,因为代码比SQL或SSIS表达式中的任何代码都要强大得多。所以它会是这样的:

  1. 添加脚本任务
  2. 添加两个字符串列(即" Column1"和" Column2")
  3. 在脚本任务中执行以下操作(假设输入列命名为" col":

    using System.Text.RegularExpressions;
    
    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        string[] columns = Row.col.ToString().Split('-');
        Regex reg = new Regex(@"[\(\)]");
        Row.Column1 = reg.Replace(columns[0], "");
        Row.Column2 = reg.Replace(columns[1], "");
    
    }
    
  4. 因此split函数将字符串转换为数组,我们可以使用正则表达式删除括号。