MySQL8.0: 插入日期数据时出错
MySQL 8.0: Error when inserting date data
我有一个制表符分隔的文件如下:
当我尝试在 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;
我收到以下错误:
Incorrect date value: '02/15/2008' for column 'BI_signup_date' at row 1
我该如何解决这个问题?
您文件中的日期格式与 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:
Each col_name_or_user_var
value is either a column name or a user variable. With user variables, the SET
clause enables you to perform preprocessing transformations on their values before assigning the result to columns.
编辑您的 csv 文件并将日期格式转换为 Y-m-d。
这将解决您关于日期格式的所有问题。
我有一个制表符分隔的文件如下:
当我尝试在 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;
我收到以下错误:
Incorrect date value: '02/15/2008' for column 'BI_signup_date' at row 1
我该如何解决这个问题?
您文件中的日期格式与 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:
Each
col_name_or_user_var
value is either a column name or a user variable. With user variables, theSET
clause enables you to perform preprocessing transformations on their values before assigning the result to columns.
编辑您的 csv 文件并将日期格式转换为 Y-m-d。 这将解决您关于日期格式的所有问题。