查询选择指定范围后一天午夜的日期


query selecting dates at midnight day after specified range

我有表dates,其中列date DATETIME数据类型。我有一个 php 查询,它有变量 period ,这是范围上限的间隔。下限始终为 NOW() .问题是当间隔等于 1 时,它还选择第二天午夜的日期。一秒钟过去了午夜,它没有选择,但

由于某种原因,还会选择tommorows date 00:00:00

下面是一个示例。

$period = 1;
$db->query(
           SELECT * FROM dates 
           WHERE date 
           BETWEEN NOW() AND CURDATE() + INTERVAL $period DAYS
          );

今天,12 月 4 日,这将选择截至并包括 2013-12-05 00:00:00 的日期。任何想法为什么会发生这种情况,因为我找不到任何原因。感谢您的阅读

Between 是 INCLUSIVE 的,这意味着下限和上限也包含在结果中。尝试使用 >= lower limit< upper limit 来做:

SELECT * FROM dates 
WHERE date >= NOW() AND date < CURDATE() + INTERVAL $period DAYS

那是因为:

foo BETWEEN bar AND baz

相当于

(bar <= foo) AND (foo <= baz)

这是一个包容性的比较。既然你在约会,你最终会得到

('2013-12-04' <= `date`) AND (`date` <= '2013-12-05 00:00:00')

如果您不希望上限包含,则必须使用长手:

(bar <= foo) AND (foo < baz)
                      ^--- note