查询中的日期比较:逻辑正确但结果错误

Posted

技术标签:

【中文标题】查询中的日期比较:逻辑正确但结果错误【英文标题】:Date comparison in query: Correct logic but wrong result 【发布时间】:2021-12-24 16:25:00 【问题描述】:

我有一个非常简单的查询。但它返回错误的结果。

select * from `table_a` where date(`schedule`) > '2021-11-13 06:31:00'

在我的表中,我有这些行

table_a
+---------------------+
|      schedule       |
+---------------------+
| 2021-11-13 08:59:00 |
+---------------------+
| 2021-11-13 08:59:00 |
+---------------------+
| 2021-11-13 08:59:00 |
+---------------------+

从技术上讲,这个查询应该返回所有行。但返回 0 行。 我尝试将操作更改为<,它返回了所有行(相反)。 我错过了什么吗?

注意:schedule 数据类型是 DATETIME。

【问题讨论】:

【参考方案1】:

您的schedule 列是日期时间,带有时间组件,因此请删除转换为日期:

SELECT * FROM table_a WHERE schedule > '2021-11-13 06:31:00';

发生的情况是您的 3 条记录都在午夜被投射到 2021-11-13,这与 2021-11-13 00:00:00 相同。应该清楚的是,所有 3 条记录都发生在该日期的午夜之后。

【讨论】:

这是否也适用于'between'操作?我正在使用 laravel 框架,似乎如果我使用 whereBetween() 子句,它会转换我传递的参数。 看不到 Laravel 代码就忍不住了。

以上是关于查询中的日期比较:逻辑正确但结果错误的主要内容,如果未能解决你的问题,请参考以下文章

无法正确比较 oracle 中的 2 个日期

在 where 子句问题中的 Oracle 日期比较

休眠查询日期仅比较月份

比较 POSIXlt 对象和日期字符串是不是正确?

SQL Server 日期比较问题

将组合框日期与datadable框进行比较