SQL generieren aus EXCEL heraus

Ausgangslage:

Ich stand vor dem Problem für eine Migration ca. 200 Einträge in einer Postgres Datenbank in ein neues Tabellenformat überführen zu müssen. Das lässt sich zwar auch händisch umsetzen, ist damm jedoch zeitaufwendig, fehleranfällig und unprofessionell. Daher habe ich einen schnellen Weg gesucht die Daten automatisiert aufzubereiten. Die Lösung war aus Excel heraus mit einer Formel ein SQL generierne zu lassen, welches hinterher in die Datenbank eingespielt werden kann.

Aus der Ursprungstabelle habe ich zwei Spalten erhalten: In der ersten Spalte steht um welche Information es sich handelt z.B. E-Mail oder Telefonnummer. In der zweiten Spalte steht dann der zugehörige Wert z.B. [email protected].

In der neuen Struktur gibt es 6 Spalten: email, name, phone_number, zip, created, updated. Bei der Migration sollen die Felder jeweils befüllt werden, welche vorhanden sind und die restlichen mit NULL gefüllt werden. Zeitstempel erhalten den Wert des Migrationslaufs.

SQL generieren

Dazu habe ich folgende Formel geschrieben, welche mir die ursprünglichen Daten auswertet und direkt ein SQL Statement erzeugt:

="Insert INTO test.neue_tabelle (email, name, phone_number, zip, created, updated) VALUES ("&WENN($A195="email";"'"&$B195&"'";" NULL")&", NULL, "&WENN($A195="tel";"'0"&$B195&"'";"NULL,")&" NULL, now(), now());"

 

Wie Funktioniert diese Formel?
Im ersten Teil des Statements wird Text ausgegeben, der Anfang unseres SQL Statements „Insert INTO test.neue_tabelle (email, name, phone_number, zip, created, updated) VALUES („. Durch das „&“ konkatenieren wir mehrere Zeichenketten miteinander. Hierauf folgt die erste Excel Funktion, die WENN-Funktion. Die WENN-Funktion ermöglicht den Vergleich zwischen einem Wert und einem erwarteten Wert. In der einfachsten Form besagt die WENN-Funktion: WENN(ein Wert wahr ist, mach dieses, sonst mache etwas anderes).

Im konkreten Fall:

WENN($A195="email";"'"&$B195&"'";" NULL")

Wenn es sich in der Zelle A195 um eine E-Mail-Adresse handelt, dann gebe diese an dieser Stelle aus, sonst gibt uns die Zeichenkette „NULL“. Dieses Statement wiederholt sich hier im Beispiel noch einmal für das Feld phone_number. Alles andere wird fest als Text ausgegeben, da diese Werte in der ursprünglichen Tabelle nicht vorkommen. Wären weitere Werte zusätzlich in den Ursprungsdaten vorhanden, so würde an dieser Stelle eine weitere WENN-Funktion gesetzt werden. Bei now() handelt es sich um eine Funktion der Postgres Datenbank die später beim Ausführen des SQLs aufgerufen werden soll, nicht um eine Excel Funktion.

Das fertige SQL welches uns durch die Formel im Excel generiert wird sieht dann wie folgt aus:

Insert INTO fraud_service.fraud_blacklist (email, name, phone_number, zip, created, updated) VALUES ('[email protected]', NULL, NULL, NULL, now(), now());

Leave a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert