给出以下值YYYY-MM-DD
$start = 2012-03-21
$stop = 2012-07-15
以及DB中的以下记录,也是YYYY-MM-DD
DATE_FROM DATE_TO PRICE
2012-01-01 2012-03-01 123
2012-03-01 2012-04-08 123
2012-04-09 2012-06-04 456
2012-06-04 2012-07-02 789
2012-07-02 2012-07-16 111
2012-07-17 2012-08-17 222
如何选择$start
- $stop
范围内的所有记录?这应包括除最后一行和第一行之外的所有内容
尝试下面,获取记录2 - 4但不记录5。
SELECT date_from, date_to, price
FROM periods
WHERE (date(date_from) <= '$start' OR date(date_to) <= '$stop')
答案 0 :(得分:1)
你想要这样的逻辑:
date_to >= $start AND date_from <= $stop
如果您正在寻找:
Start-----Stop
From-------------------To
Start-----Stop
From-------------------To
Start-----Stop
From-------------------To
请注意,Start
始终必须在To
之前出现 Stop
始终必须在From
之后才能发生此重叠。< / p>
如果我的任何假设不符合您的要求,请告诉我。但是,无论哪种方式,我总是发现这样的内容更容易写下来,这样你就可以想象并轻松地看到大于/小于的情况。
答案 1 :(得分:0)
SELECT date_from, date_to, price
FROM periods
WHERE (date_from BETWEEN '$start' AND '$stop') AND (date_to BETWEEN '$start' AND '$stop')