gpt4 book ai didi

MySQL:搜索从昨天下午 3 点到今天下午 4 点的订单

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

我有一个表 ORDERS,其中存储了有关订单的数据及其状态和订单日期。我想搜索所有指定状态的订单,这些订单是昨天下午 3 点之后到今天下午 4 点发出的。查询将在不同的时间运行(上午 10 点、下午 3 点、下午 5 点......无论如何)。

所以举个例子:如果我今天(13.05.2014)运行查询,我想获得从 2014-12-05 15:00:00 到 13-05-2015 16:00:00 的所有订单

日期存储格式:YYYY-MM-DD HH:MM:SS

我得到的是:

select *
from orders
where status = 'new'
and (

(
date_add(created_at, INTERVAL 1 day) = CURRENT_DATE()
and hour(created_at) >= 15
) /*1*/

or (
date(created_at) = CURRENT_DATE()
and hour(created_at) <= 16
) /*2*/
)

而且我只收到今天的订单 - 好像只考虑了第二个条件。我不想使用 created >= '2014-05-12 16:00:00'(我不会使用这个查询,其他人会)。

最佳答案

当您向日期/时间添加 1 天的间隔时,您仍然保留时间部分。使用 date() 作为第一个条件:

where status = 'new' and
((date(date_add(created_at, INTERVAL 1 day)) = CURRENT_DATE() and
hour(created_at) >= 15
) /*1*/ or
(date(created_at) = CURRENT_DATE() and
hour(created_at) <= 16
) /*2*/
)

替代方法是:

where status = 'new' and
(created_at >= date_add(CURRENT_DATE(), interval 15-24 hour) and
created_at <= date_add(CURRENT_DATE(), interval 16 hour)
)

这种方法的优点是所有函数都移动到 CURRENT_DATE()。这将允许 MYSQL 利用 created_at 上的索引。

关于MySQL:搜索从昨天下午 3 点到今天下午 4 点的订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23637366/

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