【问题标题】:Date Format issue STR_TO_DATE('18:11:52', '%H:%i:%s') Returns NULL日期格式问题 STR_TO_DATE('18:11:52', '%H:%i:%s') 返回 NULL
【发布时间】:2026-01-22 14:40:01
【问题描述】:

我正在尝试将字符串更改为时间格式,但我的数据库配置似乎有些问题。因为当我尝试跟踪查询时,它给了我 null 作为回报

mysql> select STR_TO_DATE('18:11:52', '%H:%i:%s');
+-------------------------------------+
| STR_TO_DATE('18:11:52', '%H:%i:%s') |
+-------------------------------------+
| NULL                                |
+-------------------------------------+
mysql> show warnings;
+---------+------+---------------------------------------------------------------+
| Level   | Code | Message                                                       |
+---------+------+---------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '18:11:52' for function str_to_date |
+---------+------+---------------------------------------------------------------+

但是当我在另一个 Mysql Server 中尝试相同的查询时,一切正常。一定有一些配置问题。 如果有人可以提供帮助,我将不胜感激。提前致谢。

【问题讨论】:

  • 奇怪。我发现它在 MySQL 5.5 中有效,但在 5.7 中无效。
  • 看起来像一个错误。
  • 仅供参考,您的声明适用于我在 mysql 5.6 上。我想知道你的配置是否有不同的东西。有没有机会添加show variables like "sql_mode";的输出我看到在mysql文档中至少有一个基于sql_mode dev.mysql.com/doc/refman/5.7/en/…的gatcha
  • 可能还值得做一个日期格式测试,看看是否出现了意外情况,例如SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
  • 这些会发生什么? SET @@SESSION.sql_mode='NO_ZERO_DATE,NO_ZERO_IN_DATE'; select STR_TO_DATE('18:11:52', '%H:%i:%s');SET @@SESSION.sql_mode='ALLOW_INVALID_DATES'; select STR_TO_DATE('18:11:52', '%H:%i:%s');

标签: mysql linux database database-administration


【解决方案1】:

这意味着您启用了NO_ZERO_DATENO_ZERO_IN_DATE SQL 模式,因此 MySQL 将不允许您将具有 0000-00-00 隐式日期的时间字符串转换为日期时间。

由于您的输入值实际上是一个时间字符串(不是日期时间),因此使用 CONVERT() 函数可能更有意义,如下所示:

SELECT CONVERT('18:11:52', TIME);

【讨论】:

  • @FaizanYounus 如果它解决了问题,您应该接受答案。
  • 是的,我做到了@Barmar
  • @Barmar 谢谢你让我知道这件事。我现在才这样做。