【问题标题】: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。

【问题讨论】:

    标签: mysql sql database date time


    【解决方案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 代码就忍不住了。
    猜你喜欢
    • 1970-01-01
    • 2012-10-30
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多