使用SSIS在字符之间获取字符串

时间:2016-05-10 15:46:19

标签: string ssis substring concatenation

我读了Left,Right,Substring,CharIndex,但无法正确实现解决方案。我想转换:

1; #Jackson,Michael(X) 至: 杰克逊,迈克尔

基本上,我想从左边删除1;#,在名称结束后删除空格和(X)。我不能使用任何硬编码的数字,因为名字和姓氏的长度可能会有所不同。你能帮忙吗?我想使用SSIS中的派生列组件来执行此操作。

2 个答案:

答案 0 :(得分:0)

根据您的需要,以下是一些可能的解决方案。

T-SQL

DECLARE @text varchar(100) = '1;#Jackson, Michael (X)', @clean_text varchar(100)
SELECT @clean_text = RTRIM(SUBSTRING(@text, CHARINDEX('#', @text) + LEN('#'), 
                CHARINDEX('(X)', @text, CHARINDEX('#', @text)) - (CHARINDEX('#', @text) + LEN('#'))))
SELECT @clean_text

C#

string text = "1;#Jackson, Michael (X)", clean_text = "", hash = "#", x = "(";
clean_text = text.Substring(text.IndexOf(char.Parse(hash)) + hash.Length,
        text.IndexOf(char.Parse(x), text.IndexOf(char.Parse(hash))) - (text.IndexOf(char.Parse(hash)) + hash.Length)).Trim();
Console.WriteLine(clean_text);

SSIS

RTRIM(SUBSTRING(CreatedBy, FINDSTRING(CreatedBy, "#", 1) + LEN("#"), FINDSTRING(CreatedBy, "(X)", 1) - (FINDSTRING(CreatedBy, "#", 1) + LEN("#"))))

SSIS有无(X)

FINDSTRING(CreatedBy,"(X)",1) > 0 ? RTRIM(SUBSTRING(CreatedBy,FINDSTRING(CreatedBy,"#",1) + LEN("#"),FINDSTRING(CreatedBy,"(X)",1) - (FINDSTRING(CreatedBy,"#",1) + LEN("#")))) : RTRIM(SUBSTRING(CreatedBy,FINDSTRING(CreatedBy,"#",1) + LEN("#"), LEN(CreatedBy)+1 - (FINDSTRING(CreatedBy,"#",1) + LEN("#"))))

答案 1 :(得分:0)

你说:

  

基本上,我想从左边删除1;#,在名称结束后删除空格和(X)...我想使用SSIS中的派生列组件来执行此操作

从源到目标的派生列转换中的表达式:

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(样品中, “1”, “”), “;”, “”), “#”, “”), “(X)”, “”),” ”, “”)

来自:1; #Jackson,Michael(X)

致:Jackson,MichaelTo:Jackson,Michael