Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 逗号前后的字符串交换_Sql Server_String_Swap - Fatal编程技术网

Sql server 逗号前后的字符串交换

Sql server 逗号前后的字符串交换,sql-server,string,swap,Sql Server,String,Swap,我有下表 AdviserName ----------- Tearle, Michael Hearn Hearn Tearle, Michael Van Der Welden, Luke Welden, Luke Van Der Brennan, Sony G G Brennan, Sony Rhammasamysundaran, Vishnu Brahma Kuma Brahma Kuma Rhammasamysundaran, Vishnu 基本上,我需要重新安排,使它成为名字中间名姓

我有下表

AdviserName
-----------
Tearle, Michael Hearn
Hearn Tearle, Michael
Van Der Welden, Luke
Welden, Luke Van Der
Brennan, Sony G
G Brennan, Sony
Rhammasamysundaran, Vishnu Brahma Kuma 
Brahma Kuma Rhammasamysundaran, Vishnu 
基本上,我需要重新安排,使它成为名字中间名姓氏。例如迈克尔·赫恩·蒂尔、索尼G·布伦南或卢克·范德韦登

我使用了下面的语法,但不知何故,它不喜欢中间名在逗号之前,比如Hearn Tearle,Michael

If(OBJECT_ID('tempdb..#tempX') Is Not Null)

Drop Table #tempX

create table #tempX (AdviserName varchar(max))

insert into #tempX (AdviserName)
values ('Tearle, Michael Hearn'),('Hearn Tearle, Michael'),('Van Der Welden, Luke'),('Welden, Luke Van Der'),('Brennan, Sony G'),('G Brennan, Sony'),('Rhammasamysundaran, Vishnu Brahma Kuma '), ('Brahma Kuma Rhammasamysundaran, Vishnu ')

--select * from #tempX


select substring(advisername, charindex(',', replace(advisername, ' ', '')) + 1, len(advisername))+' '+ left(advisername, charindex(',', advisername) -1) as AdviserName from #tempX
下面是结果

AdviserName
--------------------------------------
 Michael Hearn Tearle
, Michael Hearn Tearle
n, Luke Van Der Welden
 Luke Van Der Welden
 Sony G Brennan
, Sony G Brennan
 Vishnu Brahma Kuma  Rhammasamysundaran
n, Vishnu  Brahma Kuma Rhammasamysundaran
如何进行查询以同时满足逗号前和逗号后的中间名

我正在使用SQL Server 2012

谢谢大家

试试这个

If(OBJECT_ID('tempdb..#tempX') Is Not Null)

Drop Table #tempX

create table #tempX (AdviserName varchar(max))

insert into #tempX (AdviserName)
values ('Tearle, Michael Hearn'),('Hearn Tearle, Michael'),('Van Der Welden, Luke'),('Welden, Luke Van Der'),('Brennan, Sony G'),('G Brennan, Sony'),('Rhammasamysundaran, Vishnu Brahma Kuma '), ('Brahma Kuma Rhammasamysundaran, Vishnu ')


select
    AdviserName,
    replace(replace(
    SUBSTRING(AdviserName,charindex(',',AdviserName),len(AdviserName))
    +' '+
     SUBSTRING(AdviserName,1,charindex(',',AdviserName))    
     ,',',''),'  ',' ')
from #tempX
试试这个

If(OBJECT_ID('tempdb..#tempX') Is Not Null)

Drop Table #tempX

create table #tempX (AdviserName varchar(max))

insert into #tempX (AdviserName)
values ('Tearle, Michael Hearn'),('Hearn Tearle, Michael'),('Van Der Welden, Luke'),('Welden, Luke Van Der'),('Brennan, Sony G'),('G Brennan, Sony'),('Rhammasamysundaran, Vishnu Brahma Kuma '), ('Brahma Kuma Rhammasamysundaran, Vishnu ')


select
    AdviserName,
    replace(replace(
    SUBSTRING(AdviserName,charindex(',',AdviserName),len(AdviserName))
    +' '+
     SUBSTRING(AdviserName,1,charindex(',',AdviserName))    
     ,',',''),'  ',' ')
from #tempX

谢谢Jayasurya,但我需要像Michael Hearn Tearle或Luke Van Der Welden那样的名字。您所做的只是删除逗号。@AdhityaSanusi,很抱歉,我做了一个小的代码更改。现在检查是的!!!它起作用了。太神了谢谢Jayasurya的帮助。真的很感谢。谢谢Jayasurya,但我需要像Michael Hearn Tearle或Luke Van Der Welden那样的名字。您所做的只是删除逗号。@AdhityaSanusi,很抱歉,我做了一个小的代码更改。现在检查是的!!!它起作用了。太神了谢谢Jayasurya的帮助。真的很感激。哇,它起作用了。你能解释一下你的查询是如何进行的吗?特别是逗号+1100和逗号-1?
逗号
只是字符串中逗号的索引。我在CTE中这样做是因为我讨厌将
charindex
位写两次,所以看起来可能比实际情况更复杂。100只是因为
子字符串
函数需要一个长度-这个数字实际上需要是最长的
advisorName
WOWW的大小。你能解释一下你的查询是如何进行的吗?特别是逗号+1100和逗号-1?
逗号
只是字符串中逗号的索引。我在CTE中这样做是因为我讨厌将
charindex
位写两次,所以看起来可能比实际情况更复杂。100仅仅是因为
子字符串
函数需要一个长度-这个数字实际上需要是最长的
advisorName