我读了Left,Right,Substring,CharIndex,但无法正确实现解决方案。我想转换:
1; #Jackson,Michael(X) 至: 杰克逊,迈克尔
基本上,我想从左边删除1;#,在名称结束后删除空格和(X)。我不能使用任何硬编码的数字,因为名字和姓氏的长度可能会有所不同。你能帮忙吗?我想使用SSIS中的派生列组件来执行此操作。
答案 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