MySQL Load Data INFILE Frage

Hallo,

ich möchte gerne eine leider nicht veränderbare csv Datei in MySQL einfügen.

Die CSV ist wiefolgt aufgebaut

dd.mm.yyyy,HH:ii,"0,94357 ",„0,53255“,„NOLOG“,„NOLOG“

Die 2 Werte sind mal 2 Beispielwerte

Meine Tabelle hat folgende Spalten
Datum,Zeit,Wert1,Wert2
CHAR TIME DOUBLE DOUBLE

Leider kann ich die 2 Werte nicht einbinden da die Werte z.B. 0,93457 und nicht 0.93457 sind.

Kann ich in der IMPORT ANWEISUNG bei
IGNORE 1 LINES („Datum“,„Zeit“,„Wert1“,„Wert2“)
eine REPLACE Anweisung einbinden?
z.B. REPLACE (Wert1,".",",") um das Komma durch einen Punkt zu ersetzen?
Setze ich die Anweisung vor/nach dem IGNORE bekomme ich eine Fehlermeldung.

Da es viele Werte sind, möchte ich nicht 2 weitere Spalten erzeugen mit CHAR um sie dort zu REPLACEN und bei WERT1/2 einzusetzen.

Hallo Ximo,

zugegebenerweise kann ich Dir aus MySQL-Sicht nicht helfen, aber wenn es sich um eine Datei handelt (und nicht um stündlich neu reinkommende Daten) spricht doch nichts dagegen, die Datei in Excel zu öffnen, die Daten über die Spalte per Suchen und Ersetzen umzuwandeln, und dann in die Datenbank zu laden, oder?

Ich hoffe, dass Dir das - trotz des unkonventionellen und nicht MySQL-spezifischen Ansatzes hilft.

Gruß,
Dirk

Hallo,

hui, da hast du eine schwirige Frage, wo ich ehrlich zugeben muss, dass ich damit noch nie zu tun gehabt hatte.

Was du machen könntest, wär ein script das dir die Werte umbaut. Was auch gehen könnte wäre von MySQL bereitgestellt Funktionen zur Manipulation:

http://dev.mysql.com/doc/refman/5.1/de/string-functi… (dort runter scrollen zum Befehl CONV) aber ob die mit dem Import in einklang gebracht werden können, weiß ich auch nicht.

Evtl kannst du auch in einer Stored Procedure (http://dev.mysql.com/tech-resources/articles/mysql-s…) die ganzen Daten in einen RAM Table einlesen und darüber dann die manipulation von tabelle zu tabelle copieren mit nem sub-select.

Nur so Ideen wie es gemacht werden könnte, ob es wirklich so funktioniert muss man wohl ausprobieren. Und vor allem ob das mit so vielen Daten funktioniert, kann ich nicht wirklich sagen.

Falls du irgendwas rausgefunden hast, würd ich mich freuen auf eine Rückmeldung. :smile: Man lernt ja gerne noch dazu.

Viele Grüße
Frank

Hallo Dirk,

die CSV soll immer bei einem klick auf einer Homepage neu eingeladen werden.
Dadurch ist eine umwandlung zu umständlich und langwierig.

Gruß Dirk

Hallo Casparjones,

in MySQl gibt es ja folgenden Text

Die Spaltenliste kann entweder Spaltennamen oder Benutzervariablen enthalten. Bei Benutzervariablen gestattet Ihnen die SET-Klausel die Durchführung einer Werteumwandlung vor der Zuweisung des Ergebnisses zu den Spalten.

Benutzervariablen in der SET-Klausel können auf unterschiedliche Weise verwendet werden. Die folgenden Werte benutzen die erste Eingabespalte direkt für den Wert von t1.column1 und weisen die zweite Eingabespalte einer Benutzervariablen zu, an der eine Division durchgeführt wird, bevor sie als Wert für t1.column2 verwendet wird:

LOAD DATA INFILE ‚file.txt‘
INTO TABLE t1
(column1, @var1)
SET column2 = @var1/100;

aber warum das nicht mit dem Replace klappt, verstehe ich nicht :-/

Aber falls ich weiter komme schreibe ichs natürlich hier rein :smile:

Habe gerade hier was gefunden

http://www.issociate.de/board/post/358116/Das_deutsc…

Muss mal zuhause genauer da reinschauen,
vll hilft mir ja das weiter

Es hat geklappt

LOAD DATA INFILE ‚file.txt‘
INTO TABLE t1
(column1, @var1)
SET column2 = REPLACE(@var1,’,’,’.’);

hatte wohl vorher punkt und komma vertauscht…