SSIS Substring,Findstring,并尝试将全名列分成两列

时间:2013-09-06 18:08:54

标签: ssis

我在SSIS中设置了派生列任务,以将FullName列拆分为FirstName和LastName列。数据来自平面文件(分隔文本文件,以逗号分隔),如下所示:

|FullName|
|Lastname, Firstname Middlename|

以下是我试图让数据显示的方法重要提示 - 并非所有记录都有中间名称:

|FirstName|LastName|
|Firstname M|Lastname|

使用Substring和Findstring可以很容易地填充LastName列。我现在的问题是将名字的第一个名字和第一个字母插入FirstName列。我写了这个:

SUBSTRING(Name, (FINDSTRING(FullName, ",", 1) + 1), (FINDSTRING(FullName, ",", 1) + 1))

1 个答案:

答案 0 :(得分:1)

您可以使用

SubString(
    Right(FullName, Len(FullName) - FindString(FullName, ",", 1)),
    1,
    FindString(Right(FullName, Len(FullName) - FindString(FullName, ",", 1)), " ", 1) > 0
    ?
    FindString(Right(FullName, Len(FullName) - FindString(FullName, ",", 1)), " ", 1) + 1
    :
    Len(Right(FullName, Len(FullName) - FindString(FullName, ",", 1)))
)

代码中出现的Right(FullName, Len(FullName) - FindString(FullName, ",", 1))部分会多次提取Firstname Middlename。然后围绕它的Substring在中间名称的首字母后切断。

为了处理这个Firstname Middlename中可能没有空格的情况,有一个条件作为SubString的最后一个参数,它返回Firstname M的长度,或整个字符串的长度,在这种情况下SubString返回整个字符串。

我希望我的所有位置都是正确的,而不是左边或右边的位置。