在括号中提取字符串 - SSIS

时间:2018-06-11 12:17:01

标签: ssis

我在名为Qualifications:

的列中有以下字符串
D.Ther (ZIMB) 2017
D.Ther (ZIMB) 2016
Cert in Dental Therapy (ZIMB) 2017
D Tech (ZIMB) 1971
D Tech (The South African Dental Technicians Council -S.A) 1984
D Tech (ZIMB) 1987
Dental Technology (Natal-S.A) 1991

如何仅使用SSIS将字符串保留在括号中?例如ZIMBNatal-S.A

3 个答案:

答案 0 :(得分:3)

我会通过识别开括号和右括号FINDSTRING的位置来解决这个问题。知道这两个值后,您就可以使用SUBSTRING操作来提取中间文本。

使用SSIS表达式进行调试具有挑战性。我会采取以下方法。将3,是3,派生列任务添加到数据流中。

派生第1列

添加名为OpeningParenthesis的DT_I4类型的新列(32位整数)。以下表达式将填充值

FINDSTRING([Qualifications], "(", 1)

从列1开始,找到列中的第一个左括号(区分大小写)资格。

派生第2列

添加DT_I4类型的新名为ClosingParenthesis。将使用以下表达式

FINDSTRING([Qualifications], ")", [OpeningParenthesis])

从左括号的位置开始,找到列中的第一个左括号(区分大小写)资格。

派生专栏3

这里我们将使用子字符串操作来切出中间文本。添加名为Country的新列,类型将为DT_WSTR。使用类似

的表达式
SUBSTRING([Qualifications], [OpeningParenthesis], [ClosingParenthesis]-[OpeningParenthesis])

您可能需要在该长度计算[ClosingParenthesis]-[OpeningParenthesis]

中加上或减去1

我目前没有打开SSIS,所以这是大致的答案。 FINDSTR中的任何位置可能会被一个关闭,但使用此方法可以在组件之间附加数据查看器以确定出错的位置。

此外,根据您的数据,如果列不包含括号或者它为空,则可能会出现问题。

答案 1 :(得分:0)

这是未经测试但应该让你接近。

substring - 解析带有起点的字符串和多少个字符

findstring将定位搜索字符串的第一个值的位置。

substring([column], findstring([column],"(")+1,findstring([column],")") - findstring([column],"(")+1)

答案 2 :(得分:0)

我终于得到了正确的方法如下: SUBSTRING([初级资格],FINDSTRING([初级资格],"(",1)+ 1,FINDSTRING([初级资格],")",1) - FINDSTRING ([主要资格],"(",1) - 1)