我目前正在将包含VARCHAR列中日期的表迁移到具有DATE列的新表.我设法将旧表中的字符串值清理为“YYYY-MM-DD”格式,但是当我尝试执行插入时,我收到了日期为“2006-04-31”的错误,因为4月只有30天(注册时是一个错字),
我的问题是:如果日期无效而我没有收到错误,如何将列设置为NULL?我的SQL如下:
INSERT INTO newFancyTable (created_at)
SELECT str_to_date(created, '%Y-%m-%d') FROM oldCrappyTable;
错误如下:
Error Code: 1292. Incorrect date value: '2006-04-31' for column 'created_at' at row 1
谢谢
UPDATE
我也尝试过使用以下方法:
INSERT INTO newFancyTable (created_at)
SELECT CAST(created AS DATE) FROM oldCrappyTable;
使用相同的错误,并尝试更新oldCrappyTable将返回相同的:
UPDATE oldCrappyTable SET created = CAST(created AS DATE);
两者都回归:
Error Code: 1292. Incorrect datetime value: '2006-04-31'
更新2
最后,我使用多个CASE来隔离无效日期,总之它们只有5个,
然而,这个问题可以通过以下方式重现:
CREATE TABLE dates_temp (
test_date DATE DEFAULT NULL
) ENGINE=MEMORY;
INSERT INTO dates_temp
SELECT STR_TO_DATE("2006-04-31", '%Y-%m-%d');
DROP TABLE dates_temp;