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

时间:2012-06-06 20:21:30

标签: sql-server ssis expression etl

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

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

Art-Reading                Should return Art
Art-Writing                Should return Art
Science-chemistry          Should return Science

P.S。 我知道这可以在SUBSTRING_INDEX()的MySQL中完成,但我正在寻找SSIS中的等价物,或者至少在SQL Server中

4 个答案:

答案 0 :(得分:25)

当然你可以:

enter image description here

只需像这样配置派生列:

enter image description here

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

SUBSTRING(name,1,FINDSTRING(name,"-",1) - 1)

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

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

FINDSTRING(name,"-",1) != 0 ? (SUBSTRING(name,1,FINDSTRING(name,"-",1) - 1)) : name

答案 1 :(得分:19)

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

TOKEN(character_expression, delimiter_string, occurrence)

TOKEN("a little white dog"," ",2)

返回很少来源

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

答案 2 :(得分:9)

您可以在SUBSTRING功能中指定要复制的长度,并使用CHARINDEX

检查短划线的位置
SELECT SUBSTRING(@sString, 1, CHARINDEX('-',@sString) - 1)

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

SUBSTRING(@[User::String], 1, FINDSTRING(@[User::String], "-", 1)-1)

答案 3 :(得分:1)

如果SUBSTRING长度参数返回-1则会导致错误, “长度-1对函数”SUBSTRING“无效。长度参数不能为负。将长度参数更改为零或正值。”