SQL查询姓氏,字符串中的名字

时间:2015-09-22 18:51:55

标签: sql sql-server database sql-server-2008

嘿所有我都有一个格式如下的字符串:

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

我确信我可以找到 - ,然后抓住右侧的所有内容,但之后如何在此之后撤消名称?

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:2)

这是一个选项:

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

答案 1 :(得分: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部分名称或标题-