Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL Abfrage Datenbank Business Contact Manager

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von TK8782, 31 Januar 2018.

  1. TK8782

    TK8782 Neuer Benutzer

    Hallo,

    zunächst mal einen Gruß an alle Mitglieder. Da ich neu hier bin, möchte ich mich mit diesem Thread offiziell vorstellen.

    Aktuell habe ich folgende Frage:

    Ich habe hier eine SQL-Datenbank des Business Contact Managers vorliegen und möchte die Daten daraus exportieren. Soweit erstmal kein Problem. Allerdings habe ich festgestellt dass die Datenstruktur nicht ganz dem entspricht was ich benötige und bei einigen Werten nicht mal die 1 NF eingehalten wird.
    Da ich die Daten für den Import in ein ERP System aufbereiten muss muss ich möglichst die vorhandenen Daten zumindest in die 1 Normalform bringen um Sie so wieder in die Datenbank des ERP Systems zu importieren.

    Aktuell habe ich nun folgenden Fall:

    Im Feld "Business Adress" steht die Adresse des Contacts/Firma in folgendem Aufbau als String:

    Musterstraße1
    12345 Musterstadt
    DE

    Ich benötige die Daten aber möglichst in separaten Feldern.

    Wie bekomme ich nun einen SQL-Befehl hin, der mir die Daten in diesem Memofeld separat in extra Spalten ausgibt. So wie ich das bisher sehe sind die Daten mit einem CHR(10), also einem Zeilenumbruch, getrennt.
    Die Strasse habe ich so auch schon mit einem "Select left....." herausfiltern können. Allerdings weiß ich jetzt nicht wie ich mir ausschließlich die 2. Zeile ausgeben lassen kann bzw. die 3. Zeile etc.

    Es wäre auch möglich dass ich die 1. Zeile ausgeben lasse in einer separaten Spalte speichere und anschließend mittels SQL im Memofeld nach dem Wert der neuen Spalte suche und diesen aus dem Memofeld rauslösche, damit ich als neuen Datensatz im Memofeld nur noch folgende Daten hätte:

    12345 Musterstadt
    DE

    Damit könnte ich dann denselben Befehl nochmals ausführen und mich so durchhangeln.
    Leider habe ich aber auch dafür keinen SQL-Befehl parat.

    Hat da jemand von Euch eine Idee? Wäre sehr dankbar dafür.

    Viele Grüße

    TK
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Datenbanken bringen für sowas i.d.R. eine Reihe von Funktionen mit, die sowas erledigen. Ich kenne M$SQL nicht weiter, in PostgreSQL wäre regexp_split_to_table() evtl. geeignet, hier eine Demo:

    Code:
    test=*# select E'Musterstraße1\n12345 Musterstadt\nDE';
      ?column?   
    -------------------
     Musterstraße1  +
     12345 Musterstadt+
     DE
    (1 row)
    
    test=*# select regexp_split_to_table(E'Musterstraße1\n12345 Musterstadt\nDE',E'\n');
     regexp_split_to_table
    -----------------------
     Musterstraße1
     12345 Musterstadt
     DE
    (3 rows)
    
    test=*#
    
    Mittels E'\n' wird (in PostgreSQL) ermöglich, in String solche Sonderzeichen wie \n für Zeilenumbruch zu schreiben (erstes select als Demo für Deinen String), im zweiten select zerlege ich das dann am definierten Trennzeichen, alse E'\n', in mehrere Zeilen und erhalten eine 'Tabelle' mit je einer Zeile für die einzelnen Felder des Strings.

    Vermutlich hat M$SQL was vergleichbares zu bieten, kostet ja auch Geld, da muß es das können ...
     
  3. ukulele

    ukulele Datenbank-Guru

    Du kannst natürlich mit charindex() left() right() etc. den String zerlegen, dann musst du aber alle Möglichkeiten Abfangen wie z.B. das nur ein Zeilenumbruch vorhanden ist.

    Wenn du tatsäxchlich ein sauberes Trennzeichen hast bietet sich ein Zerlegen an. Z.B. mit XML und einer CTE Tabelle:
    SQL SERVER – How to split one column into multiple columns
    Das Trennzeichen muss nicht in eine Variable, da kannst du auch CHAR(10) an die entsprechenden Stellen schreiben.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden