我有表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