2016-05-25 15 views
-1

Ich habe eine Spalte in meiner Tabelle mit 1000 Namen. Ich mag durch Aufspalten den Namen in neuem Format eine neue Spalte machen: Beispiel:Wie kann ich Name in SQL teilen

Santosh Kumar Yadav 

Es sollte sein:

Santosh K Yadav 

Mittelname mit nur Initialen und Rest Namen soll gleich sein.

Wie kann ich es tun?

+3

zunächst versuchen, etwas zu konvertieren um zu lernen und deinen Code mit Problemdetails zu teilen –

+2

Wie planst du jemanden zu behandeln, dessen Name 4 oder 5 Teile hat (und ich habe schon vorher solche indischen Namen gesehen)? –

+0

Markieren Sie die verwendeten dbms, viele von ihnen haben ihre eigenen String-Handling-Funktionen - so kann die Antwort produktspezifisch sein! – jarlh

Antwort

0

Nach Lösung in Java

// get name from database and store in var1 

String[] nameType = var1.split (' '); 
// divide var1 into firstname middlename lastname by splitting name with 'space' 

var1 = nameType [0] + ' ' + nameType [1].substring (0, 1) + ' ' + nameType [2]; 
// combine name types, but only first letter of middle name 

// write var1 in database 
-1

Versuchen Sie folgendes: -

select substring('Santosh Kumar Yadav',1,charindex(' ','Santosh Kumar Yadav')+1) + reverse(substring(reverse('Santosh Kumar Yadav'),1,charindex(' ',reverse('Santosh Kumar Yadav')))) 
+1

Das ist eine Beispielzeichenfolge. Er möchte nicht nur 'Santhos kumar Yadav' ändern. – Vishwa

+0

Ich sage ihm nur die Logik, die zu 100% korrekt ist. Ich habe seine Tabellenstruktur nicht ... –

+1

Das bedeutet, er muss jeden Benutzernamen manuell eingeben, oder? Ich bin mir sicher, dass er sich nicht darauf freut. – Vishwa

0

Bitte versuchen Sie die Verwendung des folgenden Codes zu machen. Es funktioniert gut in SQL Server 2012.

Hinweis: Dies funktioniert nur für Name mit 3 Teilen.

DECLARE @Table TABLE (Name Varchar(100)) 
INSERT INTO @Table 
(Name) 
VALUES 
('Santhosh Kumar Yadav'), 
('John Thomas Mathew'), 
('Thomas Mathew John'), 
('Mathew John Thomas'), 
('John Mathew Thomas') 
SELECT 
    SUBSTRING(Name,1,CHARINDEX(' ',Name)+1) + 
    REVERSE(SUBSTRING(REVERSE(Name),1,CHARINDEX(' ',REVERSE(Name)))) AS Name 
FROM 
    @Table 
+0

genial ..., tnxxxxxxxxxxxx. – user1573441

+0

Gern geschehen. :) –

1

Wenn Sie nur den zweiten Namen durch Initial ersetzen möchten. Hier ist eine Idee für MySQL-Datenbank.

den Namen Namen Spalte Unter der Annahme name & neue Spalte, in der Sie Daten setzen wollen formatted_name ist. Du könntest das versuchen.

UPDATE Users 
SET formatted_name = REPLACE(
          name, 
          SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 2), ' ', -1), 
          LEFT(SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 2), ' ', -1), 1) 
          ); 

Hier ist die Demo http://sqlfiddle.com/#!9/4e5f95

0

Die OP nicht die DB-Anbieter nicht erwähnt. Die Beispielversion für Oracle:

with mynames (name) as 
(select 'Santosh Kumar Yadav' from dual 
union all 
select 'Abc Defgh' from dual) 
     select 
     case when length(name) - length(replace(name, ' ', '')) + 1 < 3 then 
     name 
     else 
     regexp_replace(name,'(^|)([^ ])([^ ])*',' \2',2, 1) 
     end 
    from mynames 

Es ersetzt nur zweites Wort in der Zeichenfolge, wenn Zeichenfolge mehr als 2 Wörter hat.

0

Zu diesem Ergebnis wie

'Santosh Kumar Yadav' in 'Santosh K Yadav'

. Sie sollten eine Funktion erstellen, die

von 'Santosh Kumar Yadav' in 'Santosh K Yadav'

create function FullNameToShort(@name varchar(100)) 
returns varchar(100) 
begin 
    declare @input varchar(100) 
    set @[email protected] 
    declare @i int 
    declare @output varchar(100) 
    declare @ch varchar 
    declare @lname varchar(25) 
    declare @flag int 
    set @flag=0 
    set @i=1 
    while @i<=LEN(@input) 
    begin  
     if(SUBSTRING(@input,@i,1)=' ') 
     begin 
      set @lname=(SUBSTRING(@input,@i,len(@input)[email protected]+1)) 
      select @ch=(SUBSTRING(@input,@i+1,1)) 
      if(@flag=0) 
      begin 
      select @output=(SUBSTRING(@input,0,@i))   
      set @flag=1  
      end 
      set @[email protected]+' '[email protected]  
     end        
     set @[email protected]+1 
    end 
    select @output=SUBSTRING(@output,0,LEN(@output)) 
    set @output= @[email protected] 
    return @output 
end 

select dbo.FullNameToShort('Santosh Kumar Yadav') 

Seine wandeln die alle Mittelnamen in ein char

+1

Brilliante Idee! – dcieslak

+0

'Einfügen in TabName (Name) Wählen Sie dbo.FullNameToShort (Name) aus Tabelle1 ' Verwenden Sie diese Funktion, um Daten aus einer Tabelle in andere einzufügen –

Verwandte Themen