分割文本列的最佳方法是: -
id | Name |
--------------------------
1 | John Doe (Q849yu) |
2 | Fred Blogs (f564ju |
对此: -
id | Name | PersonalID
--------------------------
1 | John Doe | (Q849yu)
2 | Fred Blogs | (f564ju
我试图在派生列中执行此操作,但我似乎无法使表达式正确。
是否有比派生列更简单的方法?
答案 0 :(得分:2)
这样就可以了。假设,搜索到的字符串总是在最后一个空格字符之后:
ltrim(RIGHT( RTRIM( "John Doe (Q849yu) "), FINDSTRING( REVERSE( RTRIM( "John Doe (Q849yu) "))," ",1)))
如果您想要更好的方法来执行此操作,尤其是对于更复杂的字符串,请尝试在Script Component
中使用正则表达式。编写组件后,编写正则表达式并修改它与派生列转换中的杂乱表达式相比是一件小事。
您将在此处了解更多信息: Pattern matching in SSIS using Regular Expressions and the Script component
答案 1 :(得分:1)
在这种情况下,子字符串/ findstring表达式将是最佳解决方案。 搜索" ("带有一个查找字符串。然后在子字符串表达式中使用该数字。第一部分就像这样:SUBSTRING([Name],1,FINDSTRING([Name],"(", 1))
在SSIS 2012中,推出了TOKEN。如果您有multi-value列,那么这可能很有用。最后一种选择是带有.net字符串拆分方法的脚本组件。