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

时间:2013-12-04 14:21:04

标签: php mysql sql datetime

我的表dates的列dateDATETIME数据类型。我有一个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。任何想法为什么会发生这种情况,因为我找不到任何理由。感谢您阅读

2 个答案:

答案 0 :(得分:1)

之间是INCLUSIVE,意味着结果中也包含下限和上限。尝试使用>= lower limit< upper limit

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

答案 1 :(得分:1)

那是因为:

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