Sql server ssis子字符串charindex,拆分名字和姓氏

Sql server ssis子字符串charindex,拆分名字和姓氏,sql-server,excel,ssis,etl,derived-column,Sql Server,Excel,Ssis,Etl,Derived Column,我在SSIS中有一个Excel源代码,它有一个名为[Name]的列,其中有一个类似于Joe Bloggs 我想把[名字]分为[名字]和[姓氏] 我如何制作两个派生列,因为它不能作为SQL语句工作 与普通SQL一样: SUBSTRING([Name], 1, CHARINDEX(' ', [Name]) - 1) AS [Forename] SUBSTRING([Name], CHARINDEX(' ', [Name]) + 1, LEN([Name])) AS [Surname] CHARI

我在SSIS中有一个Excel源代码,它有一个名为
[Name]
的列,其中有一个类似于
Joe Bloggs

我想把[名字]分为[名字]和[姓氏]

我如何制作两个派生列,因为它不能作为SQL语句工作

与普通SQL一样:

SUBSTRING([Name], 1, CHARINDEX(' ', [Name]) - 1) AS [Forename]

SUBSTRING([Name], CHARINDEX(' ', [Name]) + 1, LEN([Name])) AS [Surname]
CHARINDEX()
在派生列中不起作用


请帮助

更正,SSIS是与TSQL不同的产品,因此您需要使用适合语言的语法

您需要添加一个派生列组件来查找第一个空格。
FINDSTRING
操作符就是您要查找的
FINDSTRING([Name],“”,1)
并将其添加为名为SpacePosition的新列

在此之后添加第二个派生列组件,以允许您创建名/姓列。不过这里的语法应该与您提供的匹配

SUBSTRING([Name], 1, [SpacePosition] - 1)
RIGHT([Name], [SpacePosition] + 1)
我提倡分两步进行的原因是,如果您得到的结果不正确,那么您至少可以确认SpacePosition是否产生了预期的结果。因为输入数据中可能会出现
麦当娜
王子
李·哈维·奥斯瓦尔德

您可以使用
TOKEN()
TOKENCOUNT()
函数拆分列,如下所示:

名字:

姓氏:

此外,
FINDSTRING()
函数是SSIS表达式中SQL
CHARINDEX()
函数的替代函数。例如:

FINDSTRING([Name], " ", 1)   

参考资料


您好,我尝试了上述方法,但没有任何乐趣。抱歉,我收到了错误行配置-请使用子字符串帮助@billinkcAlso。有些名称有中间名,我只想要名字,请x。有些名称像Joe Fred Bloggs。请帮忙,数据是“Joe Fred Bloggs”,什么是名字,什么是姓氏?只有Fred的名字和Bloggs的姓氏…有些人无意中输入了两个奇怪的中间名,需要找出它们。请帮助x解决了处置中的错误,但无法删除中间名x请帮助
TOKEN([Name]," ",TOKENCOUNT([Name]," "))
FINDSTRING([Name], " ", 1)