2017-08-07 92 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 –

相关问题