Mysql找到日期范围

时间:2012-03-21 20:17:15

标签: mysql

给出以下值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')

2 个答案:

答案 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')