提问者:小点点

SSIS如何使用派生列通过分隔符获取字符串的一部分


我试图编写一个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 - 

共3个答案

匿名用户

数据:

|                    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的专门版本。