当您尝试在DateTime列中添加一个非DateTime值时,会发生此错误。
例如,DateTime格式为YYYY-MM-DD HH:MM:SS
。因此,在任何情况下,如果您尝试添加任何格式的日期而不是原始格式,则会引发此错误。
在我的情况下,我正在使用LOAD DATA INFILE
将CSV文件加载到特定表中。 CSV文件中的一列采用另一种日期格式,因此我应该使用以下语法使用str_to_date函数更改格式:
LOAD DATA INFILE 'x.csv'
INTO TABLE orders FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
timimg,
order_id,
order_details
)
set timing= STR_TO_DATE(lower(@timing), '%d-%b-%Y %H:%i:%s');
上述语法会抛出相同的错误(函数str_to_date的时间值不正确),那么问题是什么?
问题只在于为timing列添加@字符。@字符表示您告诉MySQL不要直接将数据加载到该列的表中,而是在将其插入表之前对CSV中的值进行一些更改。
通过在上述查询中添加@字符,可以解决该问题。正确的语法是:
LOAD DATA INFILE 'x.csv'
INTO TABLE orders FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
@timimg,
order_id,
order_details
)
set timing= STR_TO_DATE(lower(@timing), '%d-%b-%Y %H:%i:%s');