我在名为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将字符串保留在括号中?例如ZIMB
,Natal-S.A
答案 0 :(得分:3)
我会通过识别开括号和右括号FINDSTRING的位置来解决这个问题。知道这两个值后,您就可以使用SUBSTRING操作来提取中间文本。
使用SSIS表达式进行调试具有挑战性。我会采取以下方法。将3,是3,派生列任务添加到数据流中。
添加名为OpeningParenthesis
的DT_I4类型的新列(32位整数)。以下表达式将填充值
FINDSTRING([Qualifications], "(", 1)
从列1开始,找到列中的第一个左括号(区分大小写)资格。
添加DT_I4类型的新名为ClosingParenthesis
。将使用以下表达式
FINDSTRING([Qualifications], ")", [OpeningParenthesis])
从左括号的位置开始,找到列中的第一个左括号(区分大小写)资格。
这里我们将使用子字符串操作来切出中间文本。添加名为Country
的新列,类型将为DT_WSTR。使用类似
SUBSTRING([Qualifications], [OpeningParenthesis], [ClosingParenthesis]-[OpeningParenthesis])
您可能需要在该长度计算[ClosingParenthesis]-[OpeningParenthesis]
我目前没有打开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)