gpt4 book ai didi

mysql - SQL:选择 * WHERE 截止日期和 NOW() 后的截止时间,不带 DATETIME()

转载 作者:行者123 更新时间:2023-11-29 11:34:51 24 4
gpt4 key购买 nike

我正在尝试选择 * 未到期的任务。话虽如此,在选择任何超过此确切日期和时间的内容时,都应考虑到我有单独的日期和时间列。

目前我正在使用它,它不会选择今天的所有实例:

SELECT * FROM `tasks` WHERE `due_date` >= NOW() AND `due_time` >= NOW()

我无权更改数据库中的 DATETIME 字段。我只能选择。

due_date 的类型为 DATEdue_time 的类型为 TIME 作为类型

最佳答案

要获得您正在寻找的行为,您可以执行以下操作:

  SELECT t.* FROM `tasks` t
WHERE t.`due_date` >= DATE(NOW())
AND ( ( t.`due_date` = DATE(NOW()) AND t.`due_time` >= TIME(NOW()) )
OR ( t.`due_date` > DATE(NOW()) )
)

第一个片段是与 due_date 的比较,即今天或稍后到期的所有任务。这包括太多的任务,我们需要删除今天到期但在当前时间之前的任务。

还有其他看起来“更简单”的查询方法。上述方法将谓词保留在裸列上,因此 MySQL 可以有效地利用对合适索引的范围扫描操作。

跟进

我以前做过这种类型的查询,用于在键中使用多个列进行分页。最初的查询让我感到困扰,它的条件比实际需要的条件多。 (让我失望的是 due_time 上的 >= 条件。)

我相信这是等效的:

  SELECT t.* FROM `tasks` t
WHERE t.`due_date` >= DATE(NOW())
AND ( t.`due_date` > DATE(NOW()) OR t.`due_time` >= TIME(NOW()) )

关于mysql - SQL:选择 * WHERE 截止日期和 NOW() 后的截止时间,不带 DATETIME(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36797517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com