【问题标题】:MySql incorrect datetime valueMySql 不正确的日期时间值
【发布时间】:2016-11-21 22:04:20
【问题描述】:

我知道可能有人问过这个问题,但我一生都无法弄清楚mysql似乎不喜欢的日期时间值有什么问题。

在我的情况下,我在每个查询前面都附加了“解释”,以查看解释计划的样子。这是在实际查询运行之前完成的。问题是 mysql 不喜欢解释中的日期格式,但常规查询运行良好。

这是我收到的错误:

SQL Error: 1292, SQLState: 22007 
Incorrect datetime value: '11/19/2015 19:49:34.076' for column    'createdTime' at row 1

查询是:

explain delete from LoggableActivity where createdTime<'11/19/2015 19:49:34.076'

这种格式有什么问题?对我来说看起来不错... 为什么只有附加了解释的查询不起作用?

更多信息: 我在 java 中使用实体管理器来创建和执行查询,生成的日期是 Java 的“新日期(毫秒)”的结果。

谢谢

【问题讨论】:

  • @payamsbr 谢谢,我会在那里问。
  • 如果需要,可以使用STR_TO_DATE()函数。

标签: mysql datetime mariadb


【解决方案1】:

MONTH/DAY/YEAR 不是(重复不是)世界上最好的序列

年/月/日更好

试试这个:

explain 
select from LoggableActivity 
where createdTime<'2015-11-19 19:49:34.076'

考虑一下维基百科上的这篇文章 https://en.wikipedia.org/wiki/Date_format_by_country

看看世界上有多少人使用“大端”(yyyy-mm-dd) 或“小端”(dd-mm-yyyy) 日期格式。将日期字符串视为“大端”更为明智。特别是按年份开始日期字符串可以减少与日期数小于 13 的日期的混淆。

【讨论】:

  • 虽然这可能是最好的方法,但它似乎并没有解决我的问题。正如我所提到的,常规查询(相同的日期时间和所有)都可以通过。一旦我将解释附加到查询中,它就会抱怨。我的猜测是它与查询的字符串转换和执行有关。
  • 我不知道 MySQL 或 Java 的内部结构,但是查询的解释前缀必须通过某种过滤器来传递查询,并且这种更改会影响处理日期的方式.也许这是一个错误 - 我不能说。但是,如果您想要坚如磐石的查询,那么请停止在任何代码(不仅仅是 sql)中使用 mm/dd/yyyy。我熟悉的大多数原生 java 都使用 iso 标准日期序列。请注意,mm/dd/yyyy 只是世界人口的一小部分,因此标准如 ISO 8601
  • 感谢您的帮助!事实上,这正是你提到的。用于创建解释查询字符串的算法存在错误。将日期修复为 yyyy/mm/dd 解决了该问题。 :)
猜你喜欢
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 2017-11-19
相关资源
最近更新 更多