Offtopic Projekte
Kommentare Zurück zur Übersicht

Aus der Tabellenkalkulation in SQL wandeln

Hier wird gezeigt, wie eine Tabelle aus einer Tabellenkalkulation (z. B. LibreOffice Calc, Excel) in SQL Code gewandelt werden kann. Zum Zeitpunkt habe ich keine Extension bzw. kein Plug-In gefunden, welches eine Tabelle ins SQL-Format exportiert. Deshalb wird hier Schritt-für-Schritt erklärt, wie man es schafft!

Für unser Vorhaben müssen wir folgende Schritte durchführen:

  1. Analyse der Vorlage
  2. Export ins CSV

Wir benötigen für diese Übung:

Die Übungstabelle Coen-DVDthek.ods sieht wie folgt aus:

ABCD
1IDTitelUmsatz in MioJahr
21Fargo60,71996
32The Big Lebowski17,51998
43O Brother where art thou?71,92000
54No Country for Old Men171,62007
65Burn after Reading163,72008
76Hail, Caesar!2442016

Analyse der Vorlage

Zugegeben, diese einfache Tabelle ist relativ übersichtlich. Dennoch müssen wir die Syntax von SQL-Code beachten. Und damit wir einen sauberen SQL Code haben, brauchen wir die Daten in einer Plain-Text Version: hier in CSV (Comma-Seperated Values).
Zwei Probleme sollten sofort erkannt werden:
  1. Die Spalte C1 hat Leerzeichen.
  2. Die Daten in C2 bis C7 sind Zahlen mit Nachkommastellen. Das Problem dabei: Im deutschsprachigen Raum werden Dezimalzahlen durch einen Beistrich getrennt - im Englischen mit einem Punkt. Und ebenso sieht die MySQL Datenbank seine Dezimalzahlen gerne durch einen Punkt getrennt.

Also ändern wir die Tabelle so, dass sie Vorteilhaft ins CSV Format exportiert bzw. gespeichert werden kann.
Dafür markieren wir die Zellen C2 bis C7, klicken auf die rechte Maustaste und aktivieren Zellen formatieren ...

Den Zellen erklären wir nun, dass sie Englische Zahlen sind - der Beistrich wird durch deshalb einen Punkt ersetzt!

Englische Schreibweise

Bei der Gelegenheit ändern wir in der Zelle C1 "Umsatz in Mio" in "Umsatz_in_Mio". Die Tabelle müsste jetzt aussehen:

ABCD
1IDTitelUmsatz_in_MioJahr
21Fargo60.71996
32The Big Lebowski17.51998
43O Brother where art thou?71.92000
54No Country for Old Men171.62007
65Burn after Reading163.72008
76Hail, Caesar!2442016

Wer jetzt kritisch anmerkt, dass in Zelle B7 ein Beistrich in Hail, Ceasar! ist, denkt richtig - weiß aber noch nicht, das nach dem Export alle Texte/Stings in Anführungszeichen exportiert werden. Also sollte uns dieses Detail nicht weiter beschäftigen!

Export ins CSV

LibreOffice macht uns den Export einfach. Wir müssen nur auf Datei|Speichern unter klicken und das Format CSV(.csv) angeben!

Der Feldtrenner ist ein einfacher Beistrich - der Zeichenketten-Trenner ist der doppelte Apostroph.

Speichern unter als CSV

Das CSV sieht wie folgt aus:

"ID","Titel","Einspielergebnis_in_Mio","Jahr"
1,"Fargo",60.7,1996
2,"The Big Lebowski",17.5,1998
3,"O Brother where art thou?",71.9,2000
4,"No Country for Old Men",171.6,2007
5,"Burn after Reading",163.7,2008
6,"Hail, Caesar!",244,2016

SQL INSERT

Zuerst löschen wir die doppelten Anführungszeichen der ersten Zeile. Das geht mit Suchen und Ersetzen, in dem wir als Suche ein " definieren und Ersetzen leer lassen. Wenn der Cursor auf Position 1 (Zeile 1) gesetzt ist, können wir durch ein mehrmaliges Klicken auf Ersetzen die doppelten Anführungszeichen löschen!

Im Anschluss werden wir die öffnenden runden Klammern hinzufügen. Hierfür klicken wir in Kate auf Bearbeiten|Ersetzen bzw. STRG+R
Suchen und Ersetzen mit REGEX in Kate

  1. Zuerst aktivieren wir "regular expressions" (REGEX)!
  2. Kate hat die äußerst nützliche Funktion "Suchen und Ersetzen" auch auf alle Dateien im Ordner anzuwenden. Wir prüfen, ob "In der aktuellen Datei" aktiviert ist.
  3. In das Suchfeld geben wir \n ein. Damit werden Zeilenumbrüche gesucht.
    In das Ersetzenfeld geben wir \n( ein. Unmittelbar nach dem Zeilenumbruch soll eine öffnende Klammer gesetzt werden. Also, zu jedem Anfang der nächsten Zeile.
  4. Mit einem Klick auf Suchen wird der betroffene Bereich gelb dargestellt. Hier: Jedes Zeilenende!
  5. Nach einem Klick auf Markierte ersetzen bekommen wir vor jede Zeile eine öffnende runde Klammer spendiert.
Das CSV sieht jetzt so aus:
ID,Titel,Einspielergebnis_in_Mio,Jahr
(1,"Fargo",60.7,1996
(2,"The Big Lebowski",17.5,1998
(3,"O Brother where art thou?",71.9,2000
(4,"No Country for Old Men",171.6,2007
(5,"Burn after Reading",163.7,2008
(6,"Hail, Caesar!",244,2016
(

Wir wiederholen das Prozedere für die schließende runde Klammer, nur diesmal mit
Suche: \n
Suche: ),\n

ID,Titel,Einspielergebnis_in_Mio,Jahr),
(1,"Fargo",60.7,1996),
(2,"The Big Lebowski",17.5,1998),
(3,"O Brother where art thou?",71.9,2000),
(4,"No Country for Old Men",171.6,2007),
(5,"Burn after Reading",163.7,2008),
(6,"Hail, Caesar!",244,2016),
(

Jetzt starten wir mit der Handarbeit!

  1. Die erste Zeile benötigt eine öffnende Klammer!
  2. Der Beistrich am Ende der ersten Zeile muss gelöscht werden!
  3. Die öffnende Klammer in der letzten Zeile wird gelöscht!
  4. Der letzte Beistrich , wird durch ein Semikolon ; ersetzt!
(ID,Titel,Einspielergebnis_in_Mio,Jahr)
(1,"Fargo",60.7,1996),
(2,"The Big Lebowski",17.5,1998),
(3,"O Brother where art thou?",71.9,2000),
(4,"No Country for Old Men",171.6,2007),
(5,"Burn after Reading",163.7,2008),
(6,"Hail, Caesar!",244,2016);

Das sieht schon ganz gut aus! Jetzt muss man nur mehr die SQL Befehle INSERT INTO und VALUES anbringen.
Natürlich über der ersten Zeile ein INSERT INTO Filme und unter die Zeile das VALUES

INSERT INTO Filme
(ID,Titel,Einspielergebnis_in_Mio,Jahr)

VALUES
(1,"Fargo",60.7,1996),
(2,"The Big Lebowski",17.5,1998),
(3,"O Brother where art thou?",71.9,2000),
(4,"No Country for Old Men",171.6,2007),
(5,"Burn after Reading",163.7,2008),
(6,"Hail, Caesar!",244,2016);

Damit können wir die Tabelle füllen (soeben die Tabelle auch erstellt ist)!
Das Beispiel ist skalierbar - der Lösungsansatz müsste auch für größere Daten-Tabellen Gültigkeit haben!

SQL CREATE TABLE

Wie die Tabelle erstellt wird, hängt stark vom Environment ab. In der Regel sieht die Tabellerstellung so aus:

CREATE TABLE Filme (
  ID SMALLINT NOT NULL PRIMARY KEY,
  Titel VARCHAR(200),
  Einspielergebnis_in_Mio VARCHAR(10),
  Jahr VARCHAR(4)
);

Quintessenz bzw. der ganze Code

Natürlich muss eine Datenbank vorhanden sein und aktiviert. Dann kann problemlos der SQL-Code übertragen werden!

CREATE TABLE Filme (
  ID SMALLINT NOT NULL PRIMARY KEY,
  Titel VARCHAR(200),
  Einspielergebnis_in_Mio VARCHAR(10),
  Jahr VARCHAR(4)
);

INSERT INTO Filme
(ID,Titel,Einspielergebnis_in_Mio,Jahr)

VALUES
(1,"Fargo",60.7,1996),
(2,"The Big Lebowski",17.5,1998),
(3,"O Brother where art thou?",71.9,2000),
(4,"No Country for Old Men",171.6,2007),
(5,"Burn after Reading",163.7,2008),
(6,"Hail, Caesar!",244,2016);
24. Jun 2024 - 15:00
Hier könnte dein Kommentar stehen!

Thomas Maier css4.at Logo
Thomas Maier Impressum OER: CC BY NC SA 2022-09-03