如何确定日期范围是否与特定月份的任何部分重叠?

时间:2011-11-16 17:46:34

标签: mysql sql database

问题是这样的。

我希望获得1999年11月所有演出的清单。如果演出在11月之前开始或在11月之后结束都无关紧要。

Engagements表是EA_Engagements,字段名称是

  • 开始日期
  • 结束日期

他们都是DATE形式。

3 个答案:

答案 0 :(得分:5)

select * 
from EA_Engagements 
where StartDate <= '1999-11-30' 
  and EndDate   >= '1999-11-01'

答案 1 :(得分:0)

'Nedret Recep'的回答在我的案例中有类似但不同的情况。我想查找给定的日期范围是否与数据库中的任何其他事件日期范围重叠。

Table (Master Blocking Dates)
mbd_id  mbd_from_date   mbd_to_date mbd_reason
1   2013-10-16  2013-10-19  Demo Blocking 1
2   2013-10-21  2013-10-24  Demo2
3   2013-10-31  2013-11-04  Demo3

我基于'Nedret Recep'建议的查询就是这个 -

SELECT * FROM ib_master_blocked_dates WHERE venue_id=$venue_id AND 
(
    (mbd_from_date BETWEEN '$from_date' AND '$to_date') 
        OR
    (mbd_to_date BETWEEN  '$from_date' AND '$to_date')
        OR
    ('$to_date' BETWEEN mbd_from_date AND mbd_to_date)
        OR
    ('$from_date' BETWEEN mbd_from_date AND mbd_to_date)
)

结果:

mbd_id  mbd_from_date   mbd_to_date mbd_reason
1   2013-10-16  2013-10-19  Demo Blocking 1
2   2013-10-21  2013-10-24  Demo2

答案 2 :(得分:-1)

这里是:

SELECT
    name, StartDate, EndDate
FROM
    EA_Engagements
WHERE
    StartDate BETWEEN '1999-11-01' AND '1999-11-30' OR
    Enddate BETWEEN  '1999-11-01' AND '1999-11-30'