So, folgendes Beispiel habe ich mal zusammengestellt:
Code:
CREATE TABLE person (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
vorname VARCHAR(50) NOT NULL,
strasse VARCHAR(50) NOT NULL,
gebdatum DATE NOT NULL,
PRIMARY KEY (id)
);
/*person.csv*/
"code";"name";"strasse";"datum"
"x11";"maier, otto";"strasse1";"02.01.1990"
"x91";"laier, fritz";"strasse2";"01.02.1990"
"xx91";"saier, emma";"strasse3";"03.03.1990"
LOAD DATA LOCAL INFILE 'person.csv'
REPLACE INTO TABLE person
FIELDS TERMINATED BY ';'
ENCLOSED BY '\"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(@skip,@name,strasse,@datum)
SET name = TRIM(SUBSTRING(@name,1,INSTR(@name,',')-1)),
vorname = TRIM(SUBSTRING(@name,INSTR(@name,',')+1)),
gebdatum = str_to_date(@datum, '%d.%m.%Y');
mysql> LOAD DATA LOCAL INFILE 'person.csv'
-> REPLACE INTO TABLE person
-> FIELDS TERMINATED BY ';'
-> ENCLOSED BY '\"'
-> ESCAPED BY '\\'
-> LINES TERMINATED BY '\r\n'
-> IGNORE 1 LINES
-> (@skip,@name,strasse,@datum)
-> SET name = TRIM(SUBSTRING(@name,1,INSTR(@name,',')-1)),
-> vorname = TRIM(SUBSTRING(@name,INSTR(@name,',')+1)),
-> gebdatum = str_to_date(@datum, '%d.%m.%Y');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> select * from person;
+----+-------+---------+----------+------------+
| id | name | vorname | strasse | gebdatum |
+----+-------+---------+----------+------------+
| 13 | maier | otto | strasse1 | 1990-01-02 |
| 14 | laier | fritz | strasse2 | 1990-02-01 |
| 15 | saier | emma | strasse3 | 1990-03-03 |
+----+-------+---------+----------+------------+
3 rows in set (0.00 sec)
Die Ausgangsdatei (CSV) hat vier Spalte, davon werden drei Spalten in die Datenbank eingelesen. Dafür habe ich diese Regeln definiert.
Code:
-> (@skip,@name,strasse,@datum)
-> SET name = TRIM(SUBSTRING(@name,1,INSTR(@name,',')-1)),
-> vorname = TRIM(SUBSTRING(@name,INSTR(@name,',')+1)),
-> gebdatum = str_to_date(@datum, '%d.%m.%Y');
1) "code" = @skip wird ignoriert (wird nicht eingelesen, erscheint nicht im SET)
2) "name" = @name - die Zeichen bis zum Komma ist der Nachname
3) "vorname" = @name - die Zeichen ab dem Komma ist der Vorname
4) "strasse" = "strasse" - Wert wird direkt übernommen (deshalb kein Variable @strasse in SET )
5) "gebdatum" = "@datum" - Typkonvertierung Datum
Das sollte eigentlich funktionieren.
Grüße
Thomas