SSIS如何通过分隔符获取字符串的一部分

Ech*_*cho 15 sql-server expression ssis etl

我需要一个SSIS表达式来获取分隔符之前的字符串的左侧部分,然后将新字符串放在一个新列中.我检查了派生列,似乎没有这样的表达式."Substring"只能返回固定长度的字符串部分.

例如,使用分隔符字符串' - ':

Art-Reading                Should return Art
Art-Writing                Should return Art
Science-chemistry          Should return Science
Run Code Online (Sandbox Code Playgroud)

PS我知道这可以在MySQL中使用SUBSTRING_INDEX()完成,但我在SSIS中寻找一个等价物,或者至少在SQL Server中

Die*_*ego 25

当然可以:

在此输入图像描述

只需配置您的派生列,如下所示:

在此输入图像描述

这是让您的生活更轻松的表达方式:

SUBSTRING(name,1,FINDSTRING(name,"-",1) - 1)
Run Code Online (Sandbox Code Playgroud)

仅供参考,第二个"1"表示首次出现字符串" - "

编辑:表达式处理字符串没有" - "

FINDSTRING(name,"-",1) != 0 ? (SUBSTRING(name,1,FINDSTRING(name,"-",1) - 1)) : name
Run Code Online (Sandbox Code Playgroud)


小智 21

迟到总比没有好,但我也想做到这一点并发现了这一点.

TOKEN(character_expression, delimiter_string, occurrence)

TOKEN("a little white dog"," ",2)
Run Code Online (Sandbox Code Playgroud)

回报很少,源头在下面

http://technet.microsoft.com/en-us/library/hh213216.aspx

  • 这可能是最好的答案。 (3认同)

msm*_*527 9

您可以指定要在SUBSTRING函数中复制的长度,并使用确认短划线的位置CHARINDEX

SELECT SUBSTRING(@sString, 1, CHARINDEX('-',@sString) - 1)
Run Code Online (Sandbox Code Playgroud)

对于SSIS表达式,它几乎是相同的代码:

SUBSTRING(@[User::String], 1, FINDSTRING(@[User::String], "-", 1)-1)
Run Code Online (Sandbox Code Playgroud)