SQL Datum Konvertierung

_tnt_

Lt. Junior Grade
Dabei seit
Aug. 2006
Beiträge
273
Hi,

im "DB Browser for SQLite" habe ich eine Datenbank erstellt wo eine Spalte "DateVar" vom Typ "Text" angelegt wurde. Die Roh Daten stammen aus einer CSV wo das Datum wie folgt hinterlegt ist "MM/DD/YYYY".

Nach dem Import der CSV in meine SQL Datenbank wollte ich eine neue Tabelle erstellen wo unter anderem das Datumsfeld in "DD.MM.YYYY" konvertiert wird.

Mir ist nicht klar, wie ich die CONVERT Funktion in den SQL-Syntax einbinden muss:

CREATE TABLE DateCon AS
SELECT DateVar
FROM DBtest;


tnt
 
Zuletzt bearbeitet:

d2boxSteve

Captain
Dabei seit
Apr. 2010
Beiträge
3.135
Schau dir bitte den Datentyp "Datetime" an, man nimmt kein Text für ein Datum :=(
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.020
Nach dem Import der CSV in meine SQL Datenbank wollte ich eine neue Tabelle erstellen wo unter anderem das Datumsfeld in "DD.MM.YYYY" konvertiert wird.
Warum?! SQL bietet einen DATE Datentyp. Dann kann man auf den Daten auch arithmetische Operationen ausführen.

Ansonsten wirst du sicherlich bei Google fündig, wie man die Daten konvertiert: https://www.google.com/search?q=sql+convert+varchar+to+date
Wenn alle Daten gleich aussehen, kommst du sicherlich auch mit SUBSTRING einfach zum Ziel.
 
Zuletzt bearbeitet:

Raijin

Admiral
Dabei seit
Nov. 2007
Beiträge
9.923
Wenn die Rede ist vom "DBBrowser for SQL", gehe ich stark davon aus, dass der "DBBrowser for SQLite" gemeint ist.

SQLite bietet keinen Datentyp DATE und deswegen verwendet man dafür TEXT. Es ist aber eine denkbar schlechte Idee, in derselben Datenbank für denselben Datentyp - hier also Datum als Text - verschiedene Formate zu nehmen. Behalte ein Format bei und sorge in der Anwendung für die korrekte Konvertierung. Wenn du statt MM/DD/YYYY lieber DD.MM.YYYY haben möchtest, dann sorge dafür, dass es so auch von der CSV importiert wird.
Wenn du nur stumpf die CSV 1:1 in die Datenbank knallst, musst die Konvertierung während des Imports oder eben vor dem Import direkt in der CSV machen.

Im CREATE Statement macht man das sowieso nicht. DATETIME ist bei SQLite nun mal TEXT und wie du den darin enthaltenen Zeit-/Datumsstring interpretierst, ist Sache deiner Anwendung.
 

_tnt_

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Aug. 2006
Beiträge
273
Genau, es handelt sich um SQLite.

Wenn du nur stumpf die CSV 1:1 in die Datenbank knallst, musst die Konvertierung während des Imports oder eben vor dem Import direkt in der CSV machen.
Das Datum in der CSV kommt entweder als "Text" oder als "Datum". Auf die Formattierung habe ich hier keinen Einfluss. Ich wollte die Konvertierung deshalb via SQL durchführen, da nach dem Import der Content (egal ob Text oder Datum) einfach als simpler Text vorhanden ist.

Kann ich in SQLite eine "View" erstellen wo das Datum einfach anders angezeigt wird oder bleibt mir nur die Formattierung in Excel?


tnt
 

Raijin

Admiral
Dabei seit
Nov. 2007
Beiträge
9.923
Naja, eine Datenbank - insbesondere SQLite - ist vorrangig ein Datenspeicher und eignet sich nur sehr bedingt für aufwändige Operationen. In einer CSV könnte man beispielsweise mit einer banalen Regex Ersetzung das Datum umkrempeln.

Wie auch immer, das Standardformat für die date and time functions von SQLite sieht so aus:

YYYY-MM-DD HH:MM:SS.sss

Das sollte man unbedingt einhalten, weil die SQLite-eigenen Datumsfunktionen nur damit funktionieren.

Code:
Freunde
Steffi    1975-10-01
Otto      1964-07-08
Harry     1983-06-23
Susi      2012-12-05

SELECT Name, Geburtstag FROM Freunde
WHERE datetime(Geburtstag) > date('1980-01-01')

--> Harry und Susi
Liegt der Zeitstring in anderer Form vor, musst du ihn in eben diese Form bringen.

Code:
Tag      = '06/23/1983'
 ---> substr(tag,7,4) || '-' || substr(tag,1,2) || '-' || substr(tag,4,2)
Resultat = '1983-06-23'
 
Top