Discussion:
Änderung des Datumsformat bei LOAD DATA INFILE möglich?
(zu alt für eine Antwort)
Thomas Barth
2007-09-19 16:33:58 UTC
Permalink
Hallo,
ich habe mehrere >1GB csv-Dateien, deren Daten aus einer
Oracle-Datenbank stammen und nun in eine MySQl-DB sollen :-) Das
verwendete Datumsformat war "DD.MM.YY" und es sollte nun nach
Möglichkeit in das mysql date übliche Format "YYYY-MM-DD" gespeichert
werden. Ist dies bei Verwendung von "LOAD DATA INFILE 'data.csv' INSERT
..." irgendwie möglich? Sonst müsste ich mit einem Perlscript die
Datensätze durchgehen, das Datum in den Datensätzen passend umändern,
und die Datensätze in neue Dateien schreiben.

Gruß,
Thomas B
Axel Schwenke
2007-09-20 08:34:58 UTC
Permalink
Post by Thomas Barth
ich habe mehrere >1GB csv-Dateien, deren Daten aus einer
Oracle-Datenbank stammen und nun in eine MySQl-DB sollen :-) Das
verwendete Datumsformat war "DD.MM.YY" und es sollte nun nach
Möglichkeit in das mysql date übliche Format "YYYY-MM-DD" gespeichert
werden. Ist dies bei Verwendung von "LOAD DATA INFILE 'data.csv' INSERT
..." irgendwie möglich?
Kurze Antwort: ja

Lange Antwort:

http://dev.mysql.com/doc/refman/5.0/en/load-data.html (SET clause)
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date


XL
Thomas Barth
2007-09-20 16:08:03 UTC
Permalink
Post by Axel Schwenke
Post by Thomas Barth
ich habe mehrere >1GB csv-Dateien, deren Daten aus einer
Oracle-Datenbank stammen und nun in eine MySQl-DB sollen :-) Das
verwendete Datumsformat war "DD.MM.YY" und es sollte nun nach
Möglichkeit in das mysql date übliche Format "YYYY-MM-DD" gespeichert
werden. Ist dies bei Verwendung von "LOAD DATA INFILE 'data.csv' INSERT
..." irgendwie möglich?
Kurze Antwort: ja
http://dev.mysql.com/doc/refman/5.0/en/load-data.html (SET clause)
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date
XL
Klappt irgendwie nicht, es wird der Defaultwert für das Datumsfeld
eingetragen. Ich habe am Ende des LOAD DATA Befehls die set-Angaben wie
folgt angehängt:

...
set mes_date = STR_TO_DATE(mes_date, '%d.%m.%y'),
mes_senddate = STR_TO_DATE(mes_senddate, '%d.%m.%y'),
mes_replydate = STR_TO_DATE(mes_replydate, '%d.%m.%y'),
mes_sentdate = STR_TO_DATE(mes_sentdate, '%d.%m.%y');

Sicher liegt es am String, den ich der Funktion STR_TO_DATE übergebe.
Denn eigentlich ist ja zu dem Zeitpunkt noch kein Feld gefüllt. Aber wie
greife ich denn nach dem entsprechenden String, der aus der csv - Datei
kommt?

Gruß,
Thomas B
Thomas Barth
2007-09-20 16:15:45 UTC
Permalink
Post by Thomas Barth
Post by Axel Schwenke
Post by Thomas Barth
ich habe mehrere >1GB csv-Dateien, deren Daten aus einer
Oracle-Datenbank stammen und nun in eine MySQl-DB sollen :-) Das
verwendete Datumsformat war "DD.MM.YY" und es sollte nun nach
Möglichkeit in das mysql date übliche Format "YYYY-MM-DD" gespeichert
werden. Ist dies bei Verwendung von "LOAD DATA INFILE 'data.csv' INSERT
..." irgendwie möglich?
Kurze Antwort: ja
http://dev.mysql.com/doc/refman/5.0/en/load-data.html (SET clause)
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date
XL
Klappt irgendwie nicht, es wird der Defaultwert für das Datumsfeld
eingetragen. Ich habe am Ende des LOAD DATA Befehls die set-Angaben wie
...
set mes_date = STR_TO_DATE(mes_date, '%d.%m.%y'),
mes_senddate = STR_TO_DATE(mes_senddate, '%d.%m.%y'),
mes_replydate = STR_TO_DATE(mes_replydate, '%d.%m.%y'),
mes_sentdate = STR_TO_DATE(mes_sentdate, '%d.%m.%y');
Sicher liegt es am String, den ich der Funktion STR_TO_DATE übergebe.
Denn eigentlich ist ja zu dem Zeitpunkt noch kein Feld gefüllt. Aber wie
greife ich denn nach dem entsprechenden String, der aus der csv - Datei
kommt?
Etwa mit der Uservariable?

LOAD DATA INFILE 'my.csv' INTO TABLE message
(mes_date, @var1)
SET mes_date = STR_TO_DATE(@var1, '%d.%m.%y');
?
Thomas Barth
2007-09-20 17:07:42 UTC
Permalink
Post by Thomas Barth
Etwa mit der Uservariable?
LOAD DATA INFILE 'my.csv' INTO TABLE message
?
Ach mist, bekomme nur die Defaultwerte der Felder in die DB, wenn ich
dies so angebe und nach dem ersten Eintrag gibt es verständlicherweise
den Fehler: ERROR 1062 (23000): Duplicate entry '0' for key 1

Jemand noch eine Idee?

Gruß,
Thomas
Axel Schwenke
2007-09-20 18:02:38 UTC
Permalink
Post by Thomas Barth
Post by Thomas Barth
Post by Axel Schwenke
http://dev.mysql.com/doc/refman/5.0/en/load-data.html (SET clause)
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date
Klappt irgendwie nicht, es wird der Defaultwert für das Datumsfeld
eingetragen. Ich habe am Ende des LOAD DATA Befehls die set-Angaben wie
...
set mes_date = STR_TO_DATE(mes_date, '%d.%m.%y'),
mes_senddate = STR_TO_DATE(mes_senddate, '%d.%m.%y'),
mes_replydate = STR_TO_DATE(mes_replydate, '%d.%m.%y'),
mes_sentdate = STR_TO_DATE(mes_sentdate, '%d.%m.%y');
Klar, *so* klappt das nicht.
Post by Thomas Barth
Etwa mit der Uservariable?
Ja.
Post by Thomas Barth
LOAD DATA INFILE 'my.csv' INTO TABLE message
Aber nicht so.
So:

CREATE TABLE t1 (foo int, bar char(10), richtiges_datum date)

LOAD DATA INFILE 'my.csv' INTO TABLE t1
(foo, bar, @komisches_datum)
SET richtiges_datum = STR_TO_DATE(komisches_datum, '%d.%m.%y');


XL

Loading...