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
会使列空白或只显示其名字的第一个字母。
如果从中提取名字,我该怎么办?
提前致谢。
答案 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])