helmuthelmut2000
Goto Top

SQL funktion Mailadresse in einem DB-Feld in Vor und Nachnahmen trenne

Hallo,

Ich möchte in meiner DB in der Spalte Mailadressen die Adressen trennen in
3 verschiedene Felder.

z.B. die Mailadresse hans.mayer@mail.de sollte das
vor dem Punkt in die Spalte Vorname und das hinter dem
Punkt in die Spalte Nachnamen.
Da gibt es aber auch Adressen ohne Punkt die sollte dann in eine andere Spalte
Sonstige.

Kann mir da jemand Helfen wie man so etwas macht.

Gruß
Helmut

Content-Key: 276660

Url: https://administrator.de/contentid/276660

Printed on: April 25, 2024 at 00:04 o'clock

Member: kaiand1
kaiand1 Jul 07, 2015 at 21:22:57 (UTC)
Goto Top
Moin
Nun eine Möglichkeit währe es zb mit PHP.
Jeden Datensatz einzelnd auslesen,
Testen ob ein Punkt vor dem @ steht,
Daten in deine Spalte eintragen.
Infos gibts zb auch bei www.phpbox.de sowie zahlreiche andere Seiten.

Es würde sicherlich auch mit SQL direckt gehen oder eine andere Programiersprache deiner Wahl.
Member: LianenSchwinger
LianenSchwinger Jul 08, 2015 updated at 05:38:34 (UTC)
Goto Top
Hallo Helmut,

das ist eigentlich nicht sonderlich schwer. Das Zauberwort heißt reguläre Ausdrücke.

In Oracle könntest Du es folgendermaßen lösen.

SELECT REGEXP_SUBSTR('j_o-2.m1xys-de_n@gruetze.de', '^[0-9a-z._-]*') Komplett,  
       REGEXP_SUBSTR('j_o-2.m1xys-de_n@gruetze.de', '^[0-9a-z_-]*') VorPunkt,  
       SUBSTR(REGEXP_SUBSTR('j_o-2.m1xys-de_n@gruetze.de', '\.[0-9a-z_-]*'),2) NachPunkt  
FROM DUAL;

Geht bestimmt noch etwas eleganter face-smile

G Jörg
Member: ukulele-7
Solution ukulele-7 Jul 08, 2015 updated at 10:00:05 (UTC)
Goto Top
Das geht auch ohne reguläre Ausdrücke aber das hängt sehr stark davon ab welches SQL du benutzt. Auch wäre es gut zu wissen wie die Tabelle aufgebaut ist (ob es die neuen Spalten schon gibt, ob sie zusätzlich bestehen sollen) und ob du das einmalig bzw. regelmäßig machen willst.
Member: LianenSchwinger
LianenSchwinger Jul 08, 2015 updated at 06:57:21 (UTC)
Goto Top
... klar geht es auch ohne reguläre Ausdrücke. Ich finde das nur recht elegant.

Andere Möglichkeit mit Stringfunktionen in Oracle.

SELECT i.TmpStr Komplett,
       SUBSTR(i.TmpStr, 1, INSTR(i.TmpStr, '.', 1, 1) - 1) VorPunkt,  
       SUBSTR(i.TmpStr, INSTR(i.TmpStr, '.', 1, 1) + 1) NachPunkt  
FROM (SELECT SUBSTR('j_o-2.m1xys-de_n@gruetze.de',1, INSTR('j_o-2.m1xys-de_n@gruetze.de', '@',1,1) -1) TmpStr FROM DUAL) i  

Wenn man drüber nachdenkt kommt man bestimmt noch auf andere Varianten. face-smile

G Jörg
Member: helmuthelmut2000
helmuthelmut2000 Jul 08, 2015 at 10:01:54 (UTC)
Goto Top
Hallo,

Ich möchte es nur ein mal machen.
Die Felder Vorname und Nachname und Sonstiges gibt es schon.

Ich muss da nur ein mal eine Sortierung reinbekommen.

Gruß
Helmut
Member: ukulele-7
ukulele-7 Jul 08, 2015 at 10:21:37 (UTC)
Goto Top
Und welches DBMS benutzt du? MSSQL / MySQL, Oracle, Postgre, SQLight
Member: helmuthelmut2000
helmuthelmut2000 Jul 08, 2015 at 10:25:06 (UTC)
Goto Top
Hallo,

Das ist Informix.

Gruß
Member: LianenSchwinger
LianenSchwinger Jul 08, 2015 at 12:21:02 (UTC)
Goto Top
Da Du die Frage auf gelöst gestellt hast würde mich (vielleicht auch den ein oder anderen) noch Deine Lösung interessieren.

G Jörg
Member: LianenSchwinger
LianenSchwinger Jul 09, 2015 at 06:05:05 (UTC)
Goto Top
Hallo,

dann müsste der Lösungsansatz mit den String--Funktionen seit Informix 11.7 1:1 laufen.
Wenn man dann noch SUBSTRING_INDEX hinzunimmt kann man das ganze auch folgendermaßen lösen:

SELECT SUBSTRING_INDEX('j_o-2.m1xys-de_n@gruetze.de', '@', 1) Komplett,   
       SUBSTRING_INDEX('j_o-2.m1xys-de_n@gruetze.de', '.', 1) VorPunkt,   
       SUBSTR(SUBSTRING_INDEX('j_o-2.m1xys-de_n@gruetze.de', '@', 1),   
              INSTR('j_o-2.m1xys-de_n@gruetze.de', '.', 1, 1) + 1) NachPunkt    
FROM dual;

G Jörg