0

这是我的代码:

CREATE TABLE A 
(`ID` INT NULL,  
`DATE` DATE NULL,   
`NUM` INT NULL
); 

LOAD DATA LOCAL INFILE "fakepath/file.csv"
    INTO TABLE A
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES
    (ID,DATE,NUM)
    SET
    DATE = str_to_date(@DATE, '%Y%m%d');

csv文件中的原始数据是这样的——20160101,20160102,20160103(日期不同)。执行代码后, DATE 列中的所有日期都变为一天值,例如表 A 中的 2016-01-02。

为什么会这样?我有其他表使用相同的代码(不同的列名)

我该如何解决?谢谢!

4

1 回答 1

0

您必须先告诉 MySQL 将 from-csv 数据值加载到变量中:

LOAD DATA LOCAL INFILE "fakepath/file.csv"
    [..snip..]
    IGNORE 1 LINES
    (ID,DATE,NUM)
         ^---table field, **NOT** a variable
    SET
    DATE = str_to_date(@DATE, '%Y%m%d');
                          ^---variable never gets populated

尝试

(ID, @DATE, NUM)
     ^--note this

反而。这会将 id/num 值直接加载到表中,但会将您的日期值放入变量中,之后您可以在SET查询部分中使用该变量。

事实上,您实际上将日期值以正确的日期格式放入表中,这表明在其他地方,在前面的代码中,您确实设置了一个@DATE变量,并且它只是在此查询中被重用。但是由于您没有在此查询中更改该变量的值,因此您最终会为所有记录使用相同的日期值。

于 2016-03-14T15:11:29.623 回答