Inhalt eines Feldes in Spalten auftrennen

silkeR

Mitglied
Hallo,
hat jemand einen Tipp, wie ich den Inhalt eines Feldes in einzelne Spalten auftrenne?
Ich habe eine Spalte, wo in jedem Feld 3 Wörter durch Komma getrennt stehen. Z.B. Name, Vorname, Ort. Nun möchte ich jeden Wert in einer extra Spalte haben. Also ein Spalte Name, eine Spalte Vorname und eine Spalte Ort. Wie löse ich das am geschicktesten, da ja jeder Wert unterschiedlich lang ist. Sicher ist nur, dass immer alles durch ein Komma getrennt ist.
Wenn ich die Funktion Substring_index nehmen möchte, weiß ich nicht, was ich als Zeichenkette eingeben soll, da es ja keine feste Zeichenkette gibt. Jeder Name/Ort ist ja anders?

Kann mir jemand helfen? Wäre super. Vielen Dank für Hilfe bzw. Anregungen.

SilkeR
 
Code:
LOCATE(substr,str), LOCATE(substr,str,pos)

hiermit könntest du die Positionen der Kommatas heraus finden und danach das Feld mit
Code:
SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)

aufteilen können.
 
Sorry, versteh ich nicht.
Irgendwie hab ich ein Problem damit, dass ich nicht weiß, was ich als str/string/Zeichenkette eingeben soll. Die ganzen Beispiele haben immer eine feste Zeichenkette. Bei mir ändert sich doch aber jeder Name/Ort, also in jeder Zeile eine andere Zeichenkette.

Mal ein ganz konkretes Bsp:
Datensatz 1: Meier, Hans, Berlin
Datensatz 2: Mustermann, Max, Hamburg

Wie kann ich das in 3 Spalten auftrennen? Was wäre hier ein allg. str/string im Code Ich hab hunderte von Datensätzen.

Tausend Dank für Hilfe.

lg, silke
 
Hallo,

auf dem MySql Server 6.0 nimmst du ->

PHP:
select SUBSTRING_INDEX(c1, ',', 1) name1,substr(c1,LOCATE(',', c1)+1,LOCATE(',', c1, LOCATE(',', c1) + 1))name2und3 from test.t

Also,schade geht so nicht ganz.... Ich hab jetzt angefangen es zu bauen, klappt noch nicht ganz, es wird der erste String extrahiert, und in der nächsten spalte der 2+3te Stirng. Da muesstest du noch optimieren. Viel Spaß

Bitte sag bescheid obs geklappt hat

Lieben Gruß
 
Zuletzt bearbeitet:
Hallo,

wenn es noch gebraucht wirde, hier die finale lösung für das trennen von werten in einer spalte. Die entstandenen Werte werden in die neuen Spalten ausgegeben:
PHP:
select SUBSTRING_INDEX(c1, ',', 1) name1
,substr(c1,LOCATE(',', c1)+1,   (LOCATE(',', c1, LOCATE(',', c1) + 1)) - (LOCATE(',', c1)+1) )name_2
,substr(c1,LOCATE(',', c1, LOCATE(',', c1) + 1)+1,200) name_3
from test.t1

Viele Grüße
 
Hallo,
erstmal vielen Dank für die Mühe. Also ich hab das jetzt mal mit der "finalen Lösung" probiert. Der 1. und 2. String wird wunderbar getrennt. Allerdings kommt insg. nur noch 1 Zeile raus. D.h. in der 3. Spalte steht der komplette Rest der Datenbank.
Im konkreten Fall:
name1: Meier
name2: Hans
name3: Berlin, Mustermann, Max, Hamburg, Schulz, Klaus, München,...

Mach ich noch was falsch? Ich versuch mal, den Code nachzuvollziehen. Sorry, hab leider nicht so viel Ahnung von SQL.

Liebe Grüße
 
Hi,

ich habe folgendes in meiner spalte stehen
Code:
c1                   
-------------------- 
la,pu,mu             
lala,puc,mulleert    
lange, holger,ffo    
Meier, Hans, Berlin

Das Query habe ich noch ein bisschen optimiert, ich habe gesehen das du leerzeichen nach den Kommas hast, da kommt das hier bei mir raus:
Code:
Nach der Query:
-----------------------
name_1               name_2                                                       name_3               
-------------------- ------------------------------------------------------------ -------------------- 
la                   pu                                                           mu                   
lala                 puc                                                          mulleert             
lange                holger                                                       ffo                  
Meier                Hans                                                         Berlin

Finale Version:
PHP:
select 
ltrim (SUBSTRING_INDEX(c1, ',', 1)) name_1
,ltrim (substr(c1,LOCATE(',', c1)+1,   (LOCATE(',', c1, LOCATE(',', c1) + 1)) - (LOCATE(',', c1)+1) ))name_2
,ltrim (substr(c1,LOCATE(',', c1, LOCATE(',', c1) + 1)+1,20)) name_3
from test.t1

Ich hoffe du kriegst es noch hin, sag bescheid. Bin leider am WE im Urlaub. Viel Glück.
 
Hallo,
erstmal kurzer Einwurf: in der Orginal-DB habe ich keine Kommas zw. den Werten (hab ich grad gesehen). Sorry.

Weiß noch nicht ob's geht, werde ich jetzt erst probieren. Aber so wie dein Bsp. solls genau sein. Hoffe es geht. Danke
 

Neue Beiträge

Zurück