我想从我的 CSV 文件中加载特定的列数据(MySQL 8.0)
Posted
技术标签:
【中文标题】我想从我的 CSV 文件中加载特定的列数据(MySQL 8.0)【英文标题】:I want to load specific column data from my CSV file(MySQL 8.0) 【发布时间】:2020-01-10 08:03:35 【问题描述】:我创建了一个这样的折扣表
CREATE TABLE discounts (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
expired_date DATE NOT NULL,
amount DECIMAL(10 , 2 ) NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
我想从我的 CSV 中导入特定的列数据(标题、过期日期、金额)。所以我使用以下 SQL 行。
LOAD DATA INFILE 'C:/ProgramData/mysql/MySQL Server 8.0/Uploads/NewFolder/MYfile.csv'
INTO TABLE discounts(title,expired_date,amount)
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
但它给了我一个错误。
错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 'FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS' 附近使用正确的语法
MyFile.csv 是这样的
date |title |expired_date | amount | sales_person
2019/08/12 |ABC Company |2019/08/12 |200 | John
2019/08/15 |Aroma Company |2019/08/16 |22 | Anna
2019/08/15 |Risona Company|2019/08/16 |268 | Anna
非常感谢任何帮助。 提前致谢!!
萨米
【问题讨论】:
如果准确,您的 CSV 样本似乎在许多地方都有额外的空白填充。另请注意,title
列是第二个,而不是第一个。
错误信息是什么?
你好,Paul 这是错误 12:55:22 LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/NewFolder/MYfile.csv' INTO TABLE discounts(title,expired_date ,amount) FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS Error Code: 1064. 您的 SQL 语法有误;请查看与您的 MySQL 服务器版本对应的手册在第 3 行 0.000 秒的 'FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS' 附近使用正确的语法 0.000 秒
您是否尝试使用 ˋFIELDS TERMINATED BY '|'ˋ(并且没有 ˋENCLOSED BY '"'ˋ)?
是的!但没有运气
【参考方案1】:
您的示例数据似乎与您的导入语句不匹配:
竖线字符(不是逗号)分隔字段,并且 周围没有引号。你可能想试试:
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/NewFolder/MYfile.csv'
INTO TABLE discounts(title,expired_date,amount)
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
如果需要调整/进一步详细信息,请发表评论。
【讨论】:
【参考方案2】:令人惊讶的是,the list of columns comes last。
更新您还需要告诉它忽略第一行。您可以使用未使用的变量来执行此操作。你的文件是|
分隔的。而且没有引号。
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/NewFolder/MYfile.csv'
INTO TABLE discounts
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(@ignore,title,expired_date,amount);
【讨论】:
我收到以下错误 20:36:48 LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/NewFolder/MYfile.csv' INTO TABLE discounts3 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS (title,expired_date,amount) 错误代码:1292。日期值不正确:第 1 行的列 'expired_date' 的 'ABC Company' 0.000 秒 @sami88rosh 这是一个不同的问题。您的数据库列与您的 CSV 列不匹配。您有第二列作为 expired_date 但它显然包含公司名称。您需要@blank
第一列。以上是关于我想从我的 CSV 文件中加载特定的列数据(MySQL 8.0)的主要内容,如果未能解决你的问题,请参考以下文章