在我的情况下,我需要处理无效的日期值,例如:“04070$”。即使收到错误输入,如“04070$”,我也需要插入一些内容。
当我这样做时:
select str_to_date('04070$','%m%d%Y') from dual;
结果是:
2000-04-07
但是对于插入语句,我得到一个错误:
INSERT INTO `table1` ( `Date_Posted`) VALUES (str_to_date('04070$','%m%d%Y'))
#1292 - Truncated incorrect date value: '04070$'
我不明白为什么 select 语句运行良好而 insert 语句出错。当出现这样不正确的值时,有没有办法让 insert 语句插入 NULL 或日期(即使它不正确)?
最佳答案
这是因为 MySQL 运行在 Strict Mode 上.
在 SELECT
语句中,STR_TO_DATE()
将返回一年,但由于它不是 100% 匹配,它还会发出警告:
mysql> SELECT str_to_date('040710$','%m%d%y');
+---------------------------------+
| str_to_date('040710$','%m%d%y') |
+---------------------------------+
| 2010-04-07 |
+---------------------------------+
1 row in set, 1 warning (0.00 sec)
如您所见,警告只是在选择结果中提及一点,但它仍然存在:
mysql> show warnings;
+---------+------+-------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------+
| Warning | 1292 | Truncated incorrect date value: '040710$' |
+---------+------+-------------------------------------------+
1 row in set (0.00 sec)
在严格模式下,当尝试INSERT
/UPDATE
时,任何警告都会变成错误。这就是为什么您可以在选择中看到日期但无法将其保存在数据库中的原因。
关于mysql - 截断不正确的日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213561/