我正在从excel表中提取数据,并将其转换并加载到Sql Server
2012
中。我试图在某个列Derived Column
上执行'RegistrationNumber'
转换。
'RegistrationNumber'
采用以下格式,并不是所有固定长度:
###/####
###/####
###/####
###/####
###/####
###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/####
X###/AB
XYZ##/###
XYZ##/###
ABS###/####
ABCSEDG###FG/####
我需要拿LEFT
of '/'
,在SQL Server
上放一个专栏,我必须把'/'
的RIGHT
放到SQL server
中的另一个专栏中。
以下是我在derived column
转换中的表达式:
Derived Column: RegistrationNumber
Derived Column: Replace 'RegistrationNumber'
Expression: LEFT([RegistationNumber],FINDSTRING([RegistrationNumber],"/",1) - 1)
Data Type: Unicode string [DT_WSTR]
Length: 255
Derived Column: Copy of RegistrationNumber
Derived Column: Replace 'Copy of RegistrationNumber'
Expression: RIGHT([Copy of RegistrationNumber],FINDSTRING([Copy of RegistrationNumber],"/",1) - 1)
Data Type: Unicode string [DT_WSTR]
Length: 255
对于大多数的结果,它做了我想要的。然而,其中一些我得到的结果如下:
/####
##/AA
#/####
A###XY/####
RIGHT
表达式的结果应该如下所示:
####
注意:LEFT
表达式产生了所有有效的结果
以下是我的Task
流:
Excel Source
从Copy Column
到Derived Column
到Ole DB Command
发布于 2014-05-29 10:50:41
左是2012年SSIS发行版的“新”,所以我为2005/2008年度的人们提供了使用子字符串的公式
在它的核心,您的右调用是切分最后一个N字符,但您的传球长度是位置的斜杠被发现。相反,该位置是字符串的长度,减去斜杠的位置。
至于Excel . CozyRoc和其他任何东西。这将是基于意见的,但我发现,当我能够以平面文件格式(分隔或固定宽度)获取数据时,我获得了最好的成功。假设这不是一个选项,那么我通常更喜欢使用Excel编写查询,而不是使用本机表。
发布于 2014-05-29 10:51:07
RIGHT([Copy of RegistrationNumber],FINDSTRING([Copy of RegistrationNumber],"/",1) - 1)
不正确地获得斜杠字符的字符串正确。
例如,对于X###/AB
,函数右侧应该复制2个字符。但是FINDSTRING返回5,减去1,得到值4。因此,右返回X###/AB
中的最后4个字符。
因此,您需要从字符串长度减去斜杠字符的位置,才能得到正确的结果。
https://stackoverflow.com/questions/23940298
复制相似问题