在 MySQL 中每第 n 小时获取一次订单

Get orders in every nth hour interval in MySQL

我们收集用户的订单,并在订单 delivered/canceled 前给他们 window 3 天的付款时间。我们希望每 8 小时向他们发送一次通知,提醒他们付款。我们使用每小时 cron 发送通知。

我们如何获得在第 8/16/24 小时等时间创建的所有订单?我们尝试了以下查询(简化)

SELECT * FROM t_orders where o_created > '2021-05-01 11:11:11' AND MOD( CEIL(('2021-05-02 12:12:12' - CAST(o_created AS DATETIME))/3600), 8 ) = 0

其中 o_created 是 varchar 字段(不幸的是),2021-05-01 11:11:11 是日期前 3 天(我们接受 3 天付款),2021-05-02 12:12:12 是当前日期时间。两个日期时间都来自 php,因此可以进行计算并且没有问题。

但这似乎不起作用。我们将在 3 天内收到所有订单。

在这里 TIMESTAMPDIFF 可以成为你的朋友:

 WHERE TIMESTAMPDIFF(HOUR, o_created, Now()) IN (8, 16, 24, … )