您可以使用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