Sql server ssis子字符串charindex,拆分名字和姓氏
我在SSIS中有一个Excel源代码,它有一个名为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
[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表达式中SQLCHARINDEX()
函数的替代函数。例如:
FINDSTRING([Name], " ", 1)
参考资料
TOKEN([Name]," ",TOKENCOUNT([Name]," "))
FINDSTRING([Name], " ", 1)