我试图编写一个SSIS表达式以在分隔符之前获取字符串的正确部分,然后将新字符串放入新列中。我在派生列中使用了Substring和Findstring,但我遇到了麻烦。
Company
Virgin Altantic - F30008
Google - F38115
我需要找回F30008和F38115。
我用了这个表达:
(DT_STR,65,1252)(FINDSTRING(Company,"-",1)!=0?(SUBSTRING(Company,1, FINDSTRING(Company,"-",1)2)):Company)
从这个表达我得到:
Company
Virgin Altantic -
Google -
数据:
| COMPANY |
|----------------------------|
| Virgin Altantic - F30008 |
| Google - F38115 |
| Google youtube - F38115169 |
派生列代码:
新专栏1
SUBSTRING(Company,1,LEN(Company) - FINDSTRING(REVERSE(Company),"-",1) - 1)
新专栏2
SUBSTRING(Company,LEN(Company) - FINDSTRING(REVERSE(Company),"-",1) + 3,FINDSTRING(REVERSE(Company),"-",1) - 2)
结果:
只需使用带有“-”分隔符的SSIS TOKEN,然后使用TRIM
您遇到的问题是您想要字符串的结尾,而您当前的代码为您提供了字符串的开头。
SUBSTRING的留档指定3个参数:表达式、起始位置和长度。FINDSTRING返回分隔符的位置。您正在做的是指定列中第一个字符1的起始位置。
取而代之的是,使其成为分隔符的位置,加上2个空格以说明分隔符本身和空格。长度将是LEN([Company])-FINDSTRING([Company],"- ",1)
在SSIS的所有版本中,我们也有权利,这是您也可以使用的SUBSTRING的专门版本。