16

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

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

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

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

4

4 回答 4

29

迟到总比没有好,但我也想这样做并找到了这个。

TOKEN(character_expression, delimiter_string, occurrence)

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

返回很少来源在下面

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

于 2014-01-16T05:48:02.300 回答
25

当然可以:

在此处输入图像描述

只需像这样配置您的派生列:

在此处输入图像描述

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

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

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

编辑:处理不带“-”的字符串的表达式

FINDSTRING(name,"-",1) != 0 ? (SUBSTRING(name,1,FINDSTRING(name,"-",1) - 1)) : name
于 2012-06-07T09:27:10.547 回答
9

您可以指定要在SUBSTRING函数中复制的长度并使用检查破折号的位置CHARINDEX

SELECT SUBSTRING(@sString, 1, CHARINDEX('-',@sString) - 1)

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

SUBSTRING(@[User::String], 1, FINDSTRING(@[User::String], "-", 1)-1)
于 2012-06-06T20:30:40.093 回答
2

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

于 2015-09-24T06:43:01.010 回答