>,<,>=,<= 操作符比较时间类型问题

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:V3.0.8
  • 【问题描述】:原mysql 语句 select * from A where createtime > ‘2020-01’;是可以查出数据的。切换到tidb 就不可以了

你好。这边能复现问题。我们内部先讨论下。有结果会在帖子内回复。感谢你的反馈。

hi @tonyhu214, 当前 TiDB 在日期格式的解析上,与 MySQL 有一些兼容性 corner case。其中原因主要来源与两点:

  1. MySQL 的时间解析(字符串 -> datetime)代码非常复杂,杂乱无章法。
  2. 从 MySQL 的源码协议上讲,TiDB 不能直接 port MySQL 的源码(用 Go 重写也不允许),这使得在实现上,这部分逻辑没有办法做到 100% 兼容 MySQL。

针对这个 case,是否接受改写一下查询,把 ‘2020-01’ 改成标准的 ‘2020-01-01’ 格式?如果不接受,我们可以在下一个发布版本(3.0.11)尝试修复。

感觉怪怪的,假设我筛选年,不考虑月份这个补齐,就觉得不好。现在也只能补齐,但是我觉得还是应该处理下时间筛选这个问题,OLAP肯定会有相应的需求.

感谢反馈,我们内部评估下,也敬请关注官网的最新动态~~