我想从我的 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)的主要内容,如果未能解决你的问题,请参考以下文章

猪十进制值不起作用

在 Windows 中的 Qt 中加载外部 dll

从 csv.reader 之后的列(Python Pandas)中获取最早的日期

如何在 hive 表中加载多行列数据?具有换行符的列

我想从我的图像或 pdf 中获取特定数据

如何在 r 中加载和合并多个 .csv 文件?