嘿所有我都有一个格式如下的字符串:
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
我确信我可以找到 - ,然后抓住右侧的所有内容,但之后如何在此之后撤消名称?
任何帮助都会很棒!
答案 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)
您可以使用CHARINDEX
和SUBSTRING
:
<强> 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部分名称或标题-