SSIS从全名提取名字

时间:2017-08-17 14:36:13

标签: excel ssis expression

SSIS还是新手,但我在尝试将excel文件加载到我的数据库时遇到了问题。我试图将名字和姓氏加载到我的数据库表中,但由于某种原因,excel文件设置有点奇怪。

这是excel文件的示例 Excel文件



First Name    Last Name
----------    ---------
Jason         Doe
 Derek M      Smith
 John L       Doe
 Carol        Smith




因此,由于某种原因,第一个条目之后的每个条目都有一个空格,也有些条目的中间名首字母包含在名字中,有些则没有。

我尝试做的只是提取名字,然后将中间的名字保留下来。

我目前所做的只是修剪excel文件中的空白区域,如下所示。



TRIM([Member First Name])

**OUTPUT** 
Jason
Derek M
John L
Carol




当我尝试切断中间的初始时,我开始遇到问题。



 SUBSTRING(TRIM(FULLNAME),1,FINDSTRING(TRIM(FULLNAME)," ",1))
 
 **OUTPUT**
 
 Derek
 John
 ​




因此,这种方式会删除初始值,但只显示具有中间首字母的条目,并留下没有初始值的条目空白。

移动TRIM会使列空白或只显示其名字的第一个字母。

如果从中提取名字,我该怎么办?

提前致谢。

3 个答案:

答案 0 :(得分:2)

您的派生列表达式应如下所示:

FINDSTRING(TRIM(FULLNAME)," ",1) == 0 ? FULLNAME : SUBSTRING(TRIM(FULLNAME),1,FINDSTRING(TRIM(FULLNAME)," ",1))

答案 1 :(得分:1)

将当前SUBSTRING...包装在三元表达式(也称为内嵌IF)中,以便只有TRIMMED值中有空格才能执行SUBSTRING...。它只是做TRIM。

这是一个关于它应该如何显示的伪代码大纲:

{Condition} ? {Value if True} : {Value if False}

{Condition} is a test that will be TRUE if the trimmed string contains a blank space, and false if it doesn't.   The FINDSTRING() function should be useful here.

{Value if True} can simply be the current SUBSTRING(...) that you have in your last code snippet.

{Value if False} can simply be the TRIM(...) that you have in your second-to-last code snippet.

答案 2 :(得分:0)

我会检查修剪后的结果,看看两个空格是否为空。这避免了像Ann Lee这样复杂的名字。

substring(  trim([First name]),len(trim([First name]))-2,1)   ==" " ? substring(trim([First name]),1, len(trim([First name]))-3) : trim([First name])