我正在尝试列出仍可以选择发货的即将交付的货物。这些交付中的每一项都需要一定的交付时间,因此,如果您在前一天的下午5点订购,则期望明天交付是不现实的。
交货表定义了一个“ leadTime”,它是天的整数,也是一个“ nextDate”,其中包含“ YYYY-MM-DD”格式的日期字段。我需要过滤掉距离“ nextDate”至少一天的行-或更确切地说,如果上午10点之前,则为一天;如果上午10点之后,则为两天。
SELECT d.* FROM delivery d
WHERE d.nextDate >= DATE_ADD( CURRENT_DATE, INTERVAL d.leadTime DAY )
ORDER BY d.nextDate ASC, d.id ASC
例如,(假设提前期为一天)。如果星期三上午9点-我可以看到星期四以后的所有记录。但是,如果星期三是11点,我只能从星期五开始看(因为现在是10点以后,没有足够的时间准备)。
最佳答案
使用DATE(NOW() + INTERVAL 14 HOUR)
代替CURRENT_DATE
或将整个内容组合在一起:
SELECT *
FROM delivery
WHERE nextDate >= DATE(NOW() + INTERVAL 14 HOUR + INTERVAL leadTime DAY)
ORDER BY nextDate ASC, id ASC