【问题标题】:Add extra column of data when using LOAD DATA LOCAL INFILE使用 LOAD DATA LOCAL INFILE 时添加额外的数据列
【发布时间】:2014-07-21 22:57:27
【问题描述】:

我正在使用以下 LOAD DATA LOCAL INFILE 查询从文件中读取数据并将其插入到表中。一切都很好。但是,我需要修改查询以支持一项附加要求。

我需要在数据中添加一个额外的列。基本上我的原始数据不包含日期字段,我需要包含一个列,我可以在其中添加数据导入的日期。该文件将每天自动导入一次,我需要将该日期添加到数据中。

有没有办法在使用 LOAD DATA LOCAL INFILE 时添加一列数据?我可以轻松捕获今天的日期,但我不知道如何将其添加到下面的查询中。

$insert_query = LOAD DATA LOCAL INFILE 'C:/mydata.csv' 
INSERT INTO TABLE myTable
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(Column1,Column2,Column3,Column4);

$db->setQuery($insert_query);
$res = $db->query();

任何建议将不胜感激!!!谢谢!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以在查询末尾添加SET 子句,例如

    LOAD DATA LOCAL INFILE 'C:/mydata.csv' 
    INSERT INTO TABLE myTable
    FIELDS TERMINATED BY ',' 
    OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY '\r\n' 
    IGNORE 1 LINES 
    (Column1,Column2,Column3,Column4)
    SET datetime = NOW();
    

    【讨论】:

    • 任何一个答案都有效,但这一个最适合我。我总是对 Stackoverflow 中答案的质量印象深刻。谢谢!
    • 有没有办法修改 csv 文件中的数据?例如用户可以上传带有INDIA之类的国家/地区的csv,但在数据库中我需要存储它的ID,例如91
    • @RNKushwaha 我认为你可以通过在列列表中包含一个变量来做到这一点,比如...,Column4,@Country,然后在你的 SET 子句中使用该变量,比如SET datetime = NOW(), Column5 = CASE @Country WHEN 'INDIA' THEN 91 END CASE
    【解决方案2】:

    与其将此字段添加到查询中,不如将其添加到表中更容易:

    ALTER TABLE myTable
        ADD COLUMN datetime_entered TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
    

    然后,任何插入都将自动具有输入记录时的时间戳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 2012-10-05
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多