2016-07-07 26 views
1

我目前有一個名爲PersonFullName的列。它有像這樣的IT數據:將lastname,firstname middleinitial轉換爲sql中的不同列

PERSONFULLNAME 
Doe, John A 
Doe, Jane M 
Doe, Eric 

我希望得到這種格式的數據:

LastName - FirstName - MI 
DOE -  John -  A 
DOE -  Jane -  M 
Doe -  Eric 

下面顯示了罰款,但如果我增加一箇中間名首字母,中間初始土地在名字欄中。

declare @last as varchar(20) 
declare @first as varchar(20) 
declare @mid as varchar(20) 

declare @name varchar(100) 
select @name = 'Leake, Angela' 

set @last = substring(@name, 1,charindex(', ',@name)-1) 
set @first = LTRIM(substring(@name, charindex(' ',@name),len(@name)-charindex(' ',@name)+1)) 
set @mid = RIGHT(@name, CHARINDEX(' ', REVERSE(@name))-1) 
If (@[email protected]) SET @mid='' 

select @last as 'Last Name', @first as 'First Name',@mid as 'Middle Name' 

Select PERSONFULLNAME FROM Kronos 
+2

你能告訴我們你有什麼到目前爲止已經試過? – Matt

+0

用您正在使用的數據庫標記您的問題,以及您爲解決問題所做的嘗試。 –

+1

這個答案有幫助嗎? [如何將字符串拆分爲視圖列](http://stackoverflow.com/questions/17150593/how-to-split-string-into-columns-for-a-view) – Okomikeruko

回答

1

是的okomikeruko工作。我仍然在學習SQL,所以我不知道CTE。

我需要的也正是下面...

WITH CTE AS 
(
    SELECT PERSONFULLNAME, 
      LEN(PERSONFULLNAME)-LEN(REPLACE(PERSONFULLNAME,' ','')) N 
    FROM Kronos 
) 
SELECT PERSONFULLNAME, 
     PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N) 'First Name', 
     PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N+1) 'Last Name', 
     PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N-1) 'MI' 
FROM CTE 
+0

這是Kronos計時系統嗎? – scsimon

+0

你是對的。 –

+0

好的,我以前在那個數據庫中玩過並記住在[PERSON]表中分割的名字。不知道你的環境是什麼樣子,但我只是好奇。 – scsimon

相關問題