0

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

|FullName|
|Lastname, Firstname Middlename|

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

|FirstName|LastName|
|Firstname M|Lastname|

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

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

1 回答 1

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中间名的首字母之后切断它。

并且考虑到 this 中可能没有空格的情况Firstname Middlename,有一个条件作为最后一个参数,SubString它要么返回 的长度,要么返回Firstname M整个字符串的长度,在这种情况下SubString返回整个字符串。

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

于 2013-09-06T18:16:35.327 回答