mysql to_date()不存在_错误时MySQL STR_TO_DATE为NULL

我目前正在将包含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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值