2015-09-22 98 views
0
內第一個名字

嘿所有我有一個格式化的,像這樣的字符串:以上SQL查詢姓氏,字符串

Bob Barker - The Game Show Host 
Bill Gates - A Programmer 
Steve Jobs - The Apple Guy 

是在一個名爲rowNameOcu一行。

我所希望做的是查詢和目前它是這樣的:

Barker, Bob - The Game Show Host 
Gates, Bill - A Programmer 
Jobs, Steve - The Apple Guy 

我相信我可以去找-,然後抓住一切的,正確的,但再怎麼我可以在那之後撤消這個名字嗎?

任何幫助將是偉大的!

+1

你使用什麼編程語言?這與SQL有什麼關係(除非3個字符串是來自數據庫查詢的3個單元格)?這聽起來像是簡單的字符串處理文本。您能否顯示您迄今爲止編寫的代碼以及您卡住的位置? –

+1

你對Billy Bob Thornton的結果有何期待? 「Benicio del Toro」呢? –

+3

如果您沒有此數據的單獨字段。祝好運,名稱是數據中最棘手的事情之一,因爲幾乎沒有規則。 – jbg

回答

2

這裏的一個選項:

SELECT 
SUBSTRING(rowNameOcu,CHARINDEX(' ',rowNameOcu),CHARINDEX(' ',right(rowNameOcu,len(rowNameOcu) - CHARINDEX(' ',rowNameOcu)))) + ', ' + left(rowNameOcu,CHARINDEX(' ',rowNameOcu)) + RIGHT(rowNameOcu, CHARINDEX('-',reverse(rowNameOcu))) 
FROM MyTable 
+0

這確實做了我需要做的事情......但是,它沒有把它放入ASC命令中現在這個姓氏..它依然使用第一個名字作爲順序。 – StealthRT

+1

您可以將此添加到最後: 'ORDER BY SUBSTRING(rowNameOcu,CHARINDEX('',rowNameOcu),CHARINDEX('',right(rowNameOcu,len(rowNameOcu) - CHARINDEX('',rowNameOcu)))) asc' – DonTomasino

+0

啊,將** LastFirstName **添加到** reverse([ITACRep])))**的末尾即可。 – StealthRT

0

您可以使用CHARINDEXSUBSTRING

SqlFiddleDemo

Declare @t table ([Name] varchar(100)); 

insert into @t (Name) 
VALUES ('Bob Barker - The Game Show Host'), 
     ('Bill Gates - A Programmer'), 
     ('Steve Jobs - The Apple Guy') ; 

;WITH cte AS 
(SELECT 
    [Name], 
    [Title] = CASE WHEN CHARINDEX('-', [Name]) > 0 THEN 
         SUBSTRING([Name],CHARINDEX('-',[Name])+1, (LEN([Name]) - CHARINDEX(' ',[Name])+1)) 
         ELSE NULL 
        END, 
    [FIRST_NAME] = CASE WHEN CHARINDEX(' ', [Name]) > 0 THEN 
         LEFT([Name],CHARINDEX(' ',[Name])-1) 
         ELSE[Name] 
        END, 
    [LAST_NAME] = CASE WHEN CHARINDEX(' ', [Name]) > 0 THEN 
         SUBSTRING([Name],CHARINDEX(' ',[Name])+1, (CHARINDEX('-',[name]) - CHARINDEX(' ', [name])-1)) 
         ELSE NULL 
        END 
FROM @t 
) 
SELECT [Last_Name] + ', ' + [First_Name] + ' - ' + [Title] 
FROM cte; 

警告:它們可能是邊緣的情況下,當它失敗像3部分姓名或名稱與-