我在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))
答案 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
返回整个字符串。
我希望我的所有位置都是正确的,而不是左边或右边的位置。