SQL Abfrage Datenbank Business Contact Manager

TK8782

Neuer Benutzer
Beiträge
2
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
 
Werbung:
Hat da jemand von Euch eine Idee?

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 ...
 
Werbung:
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.
 
Zurück
Oben