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-ID: 276660

Url: https://administrator.de/forum/sql-funktion-mailadresse-in-einem-db-feld-in-vor-und-nachnahmen-trenne-276660.html

Ausgedruckt am: 23.12.2024 um 04:12 Uhr

kaiand1
kaiand1 07.07.2015 um 23:22:57 Uhr
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.
LianenSchwinger
LianenSchwinger 08.07.2015 aktualisiert um 07:38:34 Uhr
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
ukulele-7
Lösung ukulele-7 08.07.2015 aktualisiert um 12:00:05 Uhr
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.
LianenSchwinger
LianenSchwinger 08.07.2015 aktualisiert um 08:57:21 Uhr
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
helmuthelmut2000
helmuthelmut2000 08.07.2015 um 12:01:54 Uhr
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
ukulele-7
ukulele-7 08.07.2015 um 12:21:37 Uhr
Goto Top
Und welches DBMS benutzt du? MSSQL / MySQL, Oracle, Postgre, SQLight
helmuthelmut2000
helmuthelmut2000 08.07.2015 um 12:25:06 Uhr
Goto Top
Hallo,

Das ist Informix.

Gruß
LianenSchwinger
LianenSchwinger 08.07.2015 um 14:21:02 Uhr
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
LianenSchwinger
LianenSchwinger 09.07.2015 um 08:05:05 Uhr
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