您可以使用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部分姓名或名称与-
你使用什么编程语言?这与SQL有什么关系(除非3个字符串是来自数据库查询的3个单元格)?这听起来像是简单的字符串处理文本。您能否显示您迄今为止编写的代码以及您卡住的位置? –
你对Billy Bob Thornton的结果有何期待? “Benicio del Toro”呢? –
如果您没有此数据的单独字段。祝好运,名称是数据中最棘手的事情之一,因为几乎没有规则。 – jbg