使用多种自定义日期格式导入csv mysql

时间:2015-01-15 01:33:07

标签: mysql date csv

我必须将csv导入到具有有趣日期格式的mysql数据库中,所以我决定使用STR_TO_Date()来转换它,但是当我尝试为日期进行多次转换时,它会在第二次转换时引发错误。

LOAD DATA LOCAL INFILE 'e:/the.csv' INTO TABLE data FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS (ID, UID, Barcode, Name, @Start, @End, Seconds) SET Start = STR_TO_DATE(@Start, '%d/%c/%Y %H:%i') SET End = STR_TO_DATE(@End, '%d/%c/%Y %H:%i')

我的数据库看起来如下:

ID  UID     Barcode Name        Start               End                 Seconds
29  12345   BBB6168 namehere    09/12/2014 18:00    09/12/2014 18:09    538
30  12345   AAA6168 namehere    10/12/2014 11:01    10/12/2014 11:02    4
31  AAAAA   ABC6084 namehere    10/12/2014 11:34    10/12/2014 11:34    5

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

正如Barranka所提到的,最好将其导入到字符串(varchar)列的表中,然后在最终表中运行插入。

LOAD DATA LOCAL INFILE 'e:/the.csv'
INTO TABLE data_temp_strings
FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(ID, UID, Barcode, Name, StartStr, EndStr, Seconds);


INSERT INTO data (ID,UID,Barcode,Name,Start,End,Seconds)
SELECT  ID,
        UID,
        Barcode,
        Name,
        STR_TO_DATE(StartStr, '%d/%c/%Y %H:%i'),
        STR_TO_DATE(EndStr, '%d/%c/%Y %H:%i'),
        Seconds
FROM   data_temp_strings;

答案 1 :(得分:0)

根据MySQL documentation for LOAD DATA INFILE,代码如下:

LOAD DATA LOCAL INFILE 'e:/the.csv'
INTO TABLE data
FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(ID, UID, Barcode, Name, @Start, @End, Seconds)
SET Start = STR_TO_DATE(@Start, '%d/%c/%Y %H:%i'),
    End = STR_TO_DATE(@End, '%d/%c/%Y %H:%i');

奖金:MySQL STR_TO_DATE() format options