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

时间:2014-05-13 16:58:26

标签: mysql sql date

我有表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 个答案:

答案 0 :(得分:4)

在日期/时间中添加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上的索引。