mysql - 截断不正确的日期值

标签 mysql sql date

在我的情况下,我需要处理无效的日期值,例如:“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/

相关文章:

javascript - 无法让 date.toLocaleString() 将时间更改为语言环境

sql - 如何计算包括分钟在内的工时?

Java Spring Boot/Mysql - 使用 HashSet 作为参数进行查询

mysql - UNION ALL 结果未正确排序

java - 在 JPA 中查询时出错

sql - JSON 和 SQL 之间的区别

javascript - 在 JavaScript 中解析 MySQL 日期

swift - 从 dateFormat 获取错误的日期

date - Java中`uuuu`格式化模式代码中的`yyyy`与`DateTimeFormatter`?

mysql - 使用从计算另一个表中提取的值更新 mysql 行