2017-08-17 91 views
1

還是SSIS的新手,但在嘗試將excel文件加載到我的數據庫時遇到了問題。我試圖將名字和姓氏加載到我的數據庫表中,但由於某種原因,excel文件設置有點奇怪。SSIS從姓名中提取姓氏

這是一個什麼樣的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可以使列空白或僅顯示其名字的第一個字母。

我能做些什麼來提取這個名字?

在此先感謝。

回答

2

派生的列表達式應該是這樣的:

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

在三元表達包裝你當前SUBSTRING...(又名直列IF),使得它只做了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. 
+0

謝謝,我沒有在派生列內使用條件分割的經驗。我嘗試閱讀它,但無法將其包裹在頭上。因此,我需要首先使用原始的'Substring(Trim(FULLNAME)...',然後將它設置爲等於某事,然後設置'?',然後設置if/else結果? – JLone

+0

@JLone添加一個psuedocode示例 –

+0

你非常想爲我解釋它! – JLone

0

我會檢查修整的結果,看看2位後面是空白的。這避免了像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])