Änderung des Datumsformat bei LOAD DATA INFILE möglich?

Änderung des Datumsformat bei LOAD DATA INFILE möglich?

am 19.09.2007 18:33:58 von Thomas Barth

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

Re: Änderung des Datumsformat bei LOAD DATA INFILE möglich?

am 20.09.2007 10:34:58 von Axel Schwenke

Thomas Barth wrote:

> 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-functio ns.html#function_str-to-date


XL

Re: Änderung des Datumsformat bei LOAD DATA INFILE möglich?

am 20.09.2007 18:08:03 von Thomas Barth

Axel Schwenke wrote:
> Thomas Barth wrote:
>
>> 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-functio ns.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

Re: Änderung des Datumsformat bei LOAD DATA INFILE möglich?

am 20.09.2007 18:15:45 von Thomas Barth

Thomas Barth wrote:
> Axel Schwenke wrote:
>> Thomas Barth wrote:
>>
>>> 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-functio ns.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?
>

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');
?

Re: Änderung des Datumsformat bei LOAD DATA INFILE möglich?

am 20.09.2007 19:07:42 von Thomas Barth

Thomas Barth wrote:

>
> 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');
> ?

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

Re: Änderung des Datumsformat bei LOAD DATA INFILE möglich?

am 20.09.2007 20:02:38 von Axel Schwenke

Thomas Barth wrote:
>> Axel Schwenke wrote:

>>> 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-functio ns.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
>> 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');

Klar, *so* klappt das nicht.

> Etwa mit der Uservariable?

Ja.

> LOAD DATA INFILE 'my.csv' INTO TABLE message
> (mes_date, @var1)
> SET mes_date = STR_TO_DATE(@var1, '%d.%m.%y');

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