2017-08-07 89 views
0

我想分解一個場分成3份,使用空間' 'SQL - 所述第一和第二空間後的值

select name from nametable; 

所有的信息是在相同的領域。例如'dr john smith''mrs jane smith'

我想結果被分成3列:

select title, firstname, lastname from nametable 

如:

'博士' 的標題, '約翰' 的名字, '史密斯' 作爲姓

'夫人' 的標題, '簡' 爲姓, '史密斯' 作爲姓

+0

不要忘記接受答案 –

回答

1

您可以使用parsename()功能,像這樣:

declare @name varchar(100) = 'Mr John Nash' 

select parsename(Replace(@name , ' ', '.'), 3) as title, 
     parsename(Replace(@name, ' ', '.'), 2) as firstName, 
     parsename(Replace(@name, ' ', '.'), 1) as lastName; 

如果你在你的@name期間,您可以使用此:

declare @name varchar(100) = 'Mr. John Nash' 


select Replace(parsename(Replace(Replace(@name, '.', '*') , ' ', '.'), 3), '*', '.') as title, 
     Replace(parsename(Replace(Replace(@name, '.', '*'), ' ', '.'), 2), '*', '.') as firstName, 
     Replace(parsename(Replace(Replace(@name, '.', '*'), ' ', '.'), 1), '*', '.') as lastName; 

在這裏,你先用一個符號,你永遠看不到更換.,例如一個*。最後再次用.代替*

+0

這確實有缺陷,如果名稱包含3個以上的空格或包含句號+3的空格,則不會找到任何內容。 '先生。約翰納什'。如果它包含句點,它將返回錯誤的結果 –

+0

我想你的意思是2個空格。問題說它只有3列:標題,名字,姓氏。在此期間,我會添加一個簡單的解決方案。 @ t-clausen.dk – TheEsnSiavashi

+0

不,我的意思是3個空格。簡單的解決方案是用不同的價值取代期限,並在parsename –

相關問題