我的表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
。任何想法为什么会发生这种情况,因为我找不到任何理由。感谢您阅读
答案 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