2017-12-06 9 views
0

Ich habe die unten stehende TabelleString tauschen vor und nach dem Komma

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 

Grundsätzlich muss ich neu ordnen, so dass es Vorname Name VZ Middle werden. Zum Beispiel Michael Hearn Tearle oder Sony G Brennan oder Luke Van Der Welden.

Ich verwendete unten Syntax aber irgendwie mag es nicht, wenn der mittlere Name vor dem Komma wie Hearn Tearle, Michael ist.

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 

Unten ist das Ergebnis.

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 

Wie stellen Sie eine Abfrage, um sowohl den zweiten Vornamen als auch das Komma anzugeben?

Ich bin mit SQL Server 2012.

Dank alle.

Antwort

1

Versuchen Sie, diese

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 
+0

Dank Jayasurya aber ich brauche die Reihenfolge Vorname Name VZ Middle wie Michael Hearn Tearle oder Luke Van Der Welden zu sein. Was Sie tun nur das Komma löschen. –

+0

@AdhityaSanusi, tut mir leid, ich habe einen kleinen Code geändert. jetzt prüfen –

+0

JA !!! es funktioniert. TOLLE !!!. Danke Jayasurya für deine Hilfe. Schätze es wirklich. –

1
;with d as 
(select AdviserName, charindex(',',AdviserName) as comma from #tempX) 
select 
ltrim(rtrim(substring(advisername,comma+1,100)))+' '+ltrim(rtrim(left(advisername,comma-1))) 
from d 
+0

WOWW ES FUNKTIONIERT. Können Sie bitte erläutern, wie Ihre Abfrage funktioniert? vor allem mit Komma + 1.100 und Komma-1? –

+1

'Komma' ist nur der Index des Kommas in der Zeichenfolge. Ich habe es in einem CTE gemacht, weil ich es hasse, zweimal das "charindex" -Bit zu schreiben, so dass es wahrscheinlich komplizierter aussieht als es ist. 100 ist einfach, weil die 'SUBSTRING'-Funktion eine Länge benötigt - diese Zahl muss tatsächlich die Größe des längsten 'AdviserName' sein – LoztInSpace

Verwandte Themen