提取括号中的字符串-SSIS
在名为“资格”的列中,我有以下字符串:提取括号中的字符串-SSIS,ssis,Ssis,在名为“资格”的列中,我有以下字符串: 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 如何仅使用SSI将字符串保留在括号中?
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
如何仅使用SSI将字符串保留在括号中?例如,
ZIMB
,Natal-S.A
这是未经测试的,但应该可以让您接近
substring——解析具有起始点和多少个字符的字符串
findstring将定位所搜索字符串的第一个值的位置
substring([column], findstring([column],"(")+1,findstring([column],")") - findstring([column],"(")+1)
我将通过确定开始括号和结束括号的位置来实现这一点。知道这两个值后,就可以使用该操作提取中间文本 SSIS表达式的调试是一项挑战。我将采取以下方法。将3,是3,派生列任务添加到数据流中 派生列1 添加类型为DT_I4(32位整数)的新列,名为
opening括号
。下面的表达式将填充该值
FINDSTRING([Qualifications], "(", 1)
从位置1开始,在“限定条件”(区分大小写)列中找到第一个左括号
派生列2
添加一个新的DT_I4类型的名为Closing括号。将使用以下表达式
FINDSTRING([Qualifications], ")", [OpeningParenthesis])
在列(区分大小写)限定中查找第一个左括号,从左括号的位置开始
派生列3
在这里,我们将使用子字符串操作来切掉中间文本。添加一个名为Country
的新列,类型将为DT_WSTR。用这样的表达
SUBSTRING([Qualifications], [OpeningParenthesis], [ClosingParenthesis]-[OpeningParenthesis])
在长度计算中,可能需要加上或减去1[ClosingBranchers]-[OpeningBranchers]
我现在没有打开SSI,所以这是大概的答案。FINDSTR中的任何位置都可能被关闭一次,但使用这种方法可以在组件之间连接Data Viewer,以确定哪里出了问题
此外,根据您的数据,如果列不包含括号或为空,则可能会出现问题。我最终找到了正确的方法,如下所示:
子字符串([初级资格]、查找字符串([初级资格]、“(”,1)+1、查找字符串([初级资格]、”),1)-查找字符串([初级资格]、“(”,1)-1)在
派生列中使用子字符串
和findstring
的组合。非常感谢,我是这方面的新手,如果您不介意,请为我提供函数。我尝试了以下操作,但它不起作用:子字符串([主要资格]+“(”,2,findstring(“),[主要资格],2)-1)它不起作用——如何不起作用?如果你不介意的话,请为我提供函数——这不是一个代码编写服务谢谢这里的子字符串([初级资格])、FINDSTRING([初级资格]、“(”,1)+1、FINDSTRING([初级资格]、”)、2)-FINDSTRING([初级资格]、“(”,1)+1)非常感谢,我收到一条错误消息,说函数findstring需要3个参数,而不是2我认为最后一个参数是不必要的,并假定为1。只需在每个findstring中添加1。我有太多的语言要跟上!非常感谢,下面的函数接近我要找的:SUBSTRING([主要资格],FINDSTRING([初级资格],“(”,1)+1,FINDSTRING([初级资格],”),1)-FINDSTRING([初级资格],“(”,1)+1)除了剩下的一个结束括号(即芝加哥-美国)卡拉奇-印度)路易斯维尔美国)外,这一切都很好。再次,您提供了更详细的答案,但最终都是一样的(即使是未经测试的性质!)