MySQL STR_TO_DATE NULL 出错

标签 mysql sql date

我目前正在将一个包含 VARCHAR 列的日期的表迁移到一个包含 DATE 列的新表。我设法将旧表中的字符串值清理为 "YYYY-MM-DD" 格式,但是当我尝试执行插入时,我收到了错误,日期为 "2006-04 -31" 因为那个四月只有 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

谢谢

更新

我也尝试过使用以下方法:

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;

最佳答案

一个可能的解决方法是关闭严格模式,无论是为整个服务器,为一个特定的 session ,还是为几个语句。例如:

 set @old_sql_mode = @@sql_mode; 
 set sql_mode = ''; 
 -- Run some statements which may result in error
 set sql_mode = @old_sql_mode;

附加信息

MySQL Documentation

关于MySQL STR_TO_DATE NULL 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19686836/

相关文章:

mysql - 仅根据 2 列计算重复行

javascript - 显示时日期格式错误

mysql - PHP Mysqli 向列插入 POINT

php - MySQL更改系统日期没有达到预期的结果

SQL 按 "weight"对记录进行排序

java - Hibernate保存和SQL插入有什么区别?

r - 强制 ggplot 比例开始,例如第一年,第一个月等

mysql - Spring roo 在保存 json 之前无法识别日期格式

mysql - 增加对mysql的同时请求数

mysql 访问被拒绝创建数据库