[MySQL 8.0:插入日期数据时出错

问题描述 投票:0回答:2

我有一个用制表符分隔的文件,如下所示:

enter image description here

当我尝试按如下方式在MySql中导入文件时:

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/customer.csv'
INTO TABLE customers
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

我收到以下错误:

第1行'BI_signup_date'列的错误日期值:'02 / 15/2008'

我该如何解决?

mysql sql load-data-infile
2个回答
2
投票

文件中日期的格式与MySQL预期的格式不匹配。此外,该列('not BI')中还有一些非日期值。一种解决方案是对输入进行预处理,以将其转换为相关格式。

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/customer.csv'
INTO TABLE customers
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(customer_id, @BI_signup_date, email_address)
SET BI_signup_date = CASE
    WHEN @BI_signup_date = 'not BI' THEN NULL
    ELSE STR_TO_DATE(@BI_signup_date, '%m/%d/%Y')
END;

这会将值'not BI'转换为NULL(因为显然无法将其转换为日期),并将其他值转换为MySQL日期格式。其他策略也是可能的,例如根据正则表达式检查值的格式。您可以根据需要修改逻辑。

参考:Input preprocessing in MySQL LOAD DATA syntax

每个LOAD DATA值可以是列名或用户变量。使用用户变量,col_name_or_user_var子句使您可以在将结果分配给列之前对其值执行预处理转换。


0
投票

编辑您的csv文件,并将日期格式转换为Y-m-d。这将解决您有关日期格式的所有问题。

© www.soinside.com 2019 - 2024. All rights reserved.