1

我正在使用“LOAD DATA LOCAL INFILE”查询将数据从 .csv 文件导入 Mysql db。.csv 包含以下内容:

ID | Name | Date | Price

 1. 01 | abc  | 13-02-2013 | 1500
 2. 02 | nbd  | blahblahbl | 1000
 3. 03 | kgj  | 11-02-2012 | jghj

我的 Mysql 表包含以下列:

Id INTEGER 
NAME Varchat(100)
InsertionTimeStamp Date
Price INTEGER 

MySQL 查询将 .csv 数据加载到上表:

LOAD DATA LOCAL INFILE 'UserDetails.csv' INTO TABLE userdetails
FIELDS TERMINATED BY ','
IGNORE 1 LINES
 (Id,Name,InsertionTimeStamp,Price)
 set InsertionTimeStamp = str_to_date(@d,'%d-%m-%Y');

当我执行查询时,3 条记录被插入到表中,并带有 2 条警告

a) Incorrect datetime value : 'blahblahbl' for function str_to_date
b) Data truncate at row 3 (because of invalid INTEGER for Price column)

问题

1. Is there any way to avoid data being inserted in table which shows warnings/errors or the row which has invalid data 

I dont want Row 2 & Row 3 to be inserted as it contains invalid data

2. For WARNING of Incorrect datetime value above, can I get the row no also?
Basically I want to get exact warning/error with the row number.
4

3 回答 3

0

我知道您正在尝试跳过有问题的行,但您不认为您的 LOAD DATA 命令有错误吗?应该是:

LOAD DATA LOCAL INFILE 'UserDetails.csv' INTO TABLE userdetails
FIELDS TERMINATED BY ','
IGNORE 1 LINES
(Id,Name,@d,Price)
set InsertionTimeStamp = str_to_date(@d,'%d-%m-%Y');

您不应该在列列表中使用变量名称 (d) 而不是列的实际名称 (InsertionTimeStamp)?这可能是您收到有关日期时间的错误消息的原因。

于 2013-09-25T01:39:31.193 回答
0

您可以在dbForge Studio for MySQL中尝试数据导入工具(CSV 或 TXT 导入格式)。在页面向导中取消选中选项,页面检查选项,它将帮助您跳过导入错误。Data ImportModesUse bulk insertErrors handlingIgnore all errors

于 2013-02-13T14:38:42.630 回答
0

我认为如果您使用其他语言(例如 php)验证输入会更容易。您只需要遍历 csv 的行并调用类似thisthisthis的内容!

如果您只需要摆弄 SQL,可能会有所帮助!

于 2013-02-13T11:24:20.657 回答