Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提取括号中的字符串-SSIS_Ssis - Fatal编程技术网

提取括号中的字符串-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)除了剩下的一个结束括号(即芝加哥-美国)卡拉奇-印度)路易斯维尔美国)外,这一切都很好。再次,您提供了更详细的答案,但最终都是一样的(即使是未经测试的性质!)