【问题标题】:Load data to mySQL and ignore specific columns将数据加载到 mySQL 并忽略特定列
【发布时间】:2016-01-09 20:47:59
【问题描述】:

我正在尝试将 csv 文件加载到 mySQL 中。我想忽略 3 列,所以我使用“@”字符来实现这一点。除了我忽略的第一列(名为:'ignore1')之后的数据之外,似乎所有内容都在上传。

这是 mySQL 软件的错误吗?

   LOAD DATA LOCAL INFILE 'Z:/test.csv'  
    INTO TABLE IN_Apolo
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS
    (name, @date, @ignore1, @ignore2, @ignore3, column3, column4)
    set date = str_to_date(@date,'%Y-%m-%d')
    ;

column3column4 似乎为 NULL

更新:

我尝试使用此代码并且它有效:

   LOAD DATA LOCAL INFILE 'Z:/test.csv'  
    INTO TABLE IN_Apolo
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS
    (@name, @date, @column3, @column4)
    set name=@name, date = str_to_date(@date,'%Y-%m-%d'), column3=@column3, column4=@column4     ;

但它也应该适用于第一个版本。

【问题讨论】:

    标签: mysql data-import


    【解决方案1】:
    LOAD DATA LOCAL INFILE 'Z:/test.csv' 
    INTO TABLE IN_Apolo 
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    (@name, @date,@column3, @column4)
    set name=@name,date=str_to_date(@date,'%Y-%m-%d'),column3=@column3,column4=@column4;
    

    尝试使用这个...

    【讨论】:

    • 检查更新的那个.. 删除你不想使用的列.. 因为你的文件可能只有 4 列所以它取值直到 @ignore2 其他它取 null .
    • 这就是我刚刚所做的,它奏效了。不过这很奇怪。无论如何它应该可以工作。
    【解决方案2】:

    表:

    DROP TABLE IF EXISTS `test_table`;
    
    CREATE TABLE `test_table` (
        `name` VARCHAR(20) DEFAULT NULL,
        `date` DATE DEFAULT NULL,
        `ignore_1` VARCHAR(20) DEFAULT NULL,
        `ignore_2` VARCHAR(20) DEFAULT NULL,
        `ignore_3` VARCHAR(20) DEFAULT NULL,
        `column_3` VARCHAR(20) DEFAULT NULL,
        `column_4` VARCHAR(20) DEFAULT NULL
    ) ENGINE=InnoDB;
    

    文件:

    /path/to/test_file.csv

    "name","date","ignore_1","ignore_2","ignore_3","column_3","column_4"
    "name_0","2000-01-01","ignore_1_0","ignore_2_0","ignore_3_0","column_3_0","column_4_0"
    "name_1","2000-01-02","ignore_1_1","ignore_2_1","ignore_3_1","column_3_1","column_4_1"
    "name_2","2000-01-03","ignore_1_2","ignore_2_2","ignore_3_2","column_3_2","column_4_2"
    

    MySQL 命令行:

    mysql> LOAD DATA INFILE '/path/to/test_file.csv'
           INTO TABLE `test_table`
           FIELDS TERMINATED BY ','
           ENCLOSED BY '"'
           LINES TERMINATED BY '\n'
           IGNORE 1 ROWS
           (`name`, @`date`, @`ignore_column`, @`ignore_column`, @`ignore_column`, `column_3`, `column_4`)
           SET `date` = STR_TO_DATE(@`date`, '%Y-%m-%d');
    

    【讨论】:

    猜你喜欢
    • 2012-08-11
    • 2011-01-23
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2019-04-02
    • 2015-03-18
    • 1970-01-01
    • 2020-11-28
    相关资源
    最近更新 更多