我尝试编写一个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 -
答案 0 :(得分:5)
数据:
| COMPANY |
|----------------------------|
| Virgin Altantic - F30008 |
| Google - F38115 |
| Google youtube - F38115169 |
派生列代码:
<强> NewColumn1 强>
SUBSTRING(Company,1,LEN(Company) - FINDSTRING(REVERSE(Company),"-",1) - 1)
<强> NewColumn2 强>
SUBSTRING(Company,LEN(Company) - FINDSTRING(REVERSE(Company),"-",1) + 3,FINDSTRING(REVERSE(Company),"-",1) - 2)
结果:
答案 1 :(得分:2)
您遇到的问题是您想要字符串的结尾,而您当前的代码会为您提供字符串的开头。
SUBSTRING的文档指定了3个参数:表达式,起始位置和长度。 FINDSTRING正在返回分隔符的位置。您正在做的是将起始位置指定为1,即列中的第一个字符。
相反,将分隔符的位置加上2个空格来考虑分隔符本身和空间。长度将是LEN([Company]) - FINDSTRING([Company],"- ",1)
在所有版本的SSIS中,我们还有RIGHT这是您也可以使用的SUBSTRING的专用版本。
答案 2 :(得分:2)
只需将SSIS TOKEN与“ - ”分隔符一起使用,然后使用TRIM