2015-09-22 60 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部分姓名或名称与-