选择开始日期和结束日期之间的值

时间:2015-02-04 19:08:56

标签: mysql sql database

我有一个包含一些事件的表,每个事件都有一个开始日期和结束日期。例如: 表eventos_sapo

id   titulo imagem startDate endDate
1    ...    ...    2011-02-12   2015-02-12
2    ...    ...    2013-02-21   2015-02-12
3    ...    ...    2014-03-14   2015-02-12

我尝试了一些查询来获取用户通过我的网络应用程序引入的某些开始日期和结束日期之间的事件,但没有一个查询返回带有id=1的事件。假设用户引入了开始date=2013-01-03和结束date=2015-02-14,应该返回事件1,2和3,但是我的查询都不会返回id = 1的事件。

这就是我尝试的内容:

Select id from eventos_sapo where startDate >= '2013-01-03' AND endDate <= '2015-02-14'

Select id from eventos_sapo where startDate BETWEEN '2013-01-03' AND '2015-02-14'
AND endDate BETWEEN '2013-01-03' AND '2015-02-14'

我需要做的是,包含id为1的事件,因为此事件处于活动状态。

3 个答案:

答案 0 :(得分:2)

根据你的评论我明白这就是你想要的

Select id from eventos_sapo where startDate >= '2013-01-03' OR endDate <= '2015-02-14'

答案 1 :(得分:1)

不应该是:

WHERE '2013-01-03' BETWEEN startDate AND endDate

答案 2 :(得分:1)

我将这个问题看作是寻找范围的重叠:

所以你有数据范围:T1到T3。并寻找范围T2到T4的重叠。因为它们重叠,你想要。 但是,如果数据是T1到T3并且范围是T4到T5 ..没有重叠,所以不想要。

您可以使用此查询执行此操作:

Select id 
  from eventos_sapo 
 where startDate <= '2015-02-14'
   AND endDate >= '2013-01-03';

因此,如果它在给定日期(2015年2月14日)之后开始,则不包括它。 或者如果它在2013年1月3日之前结束......不包括它。 包括其他所有内容,因为它重叠:

作为一个例子: 数据在给定的范围开始日期之后结束,数据开始日期在结束之前结束,因此它是以下情况之一:

Data:           |---|
Given range:      |---|

Data:           |-------|
Given range:      |---|

Data:             |---|
Given range:    |---|

Data:             |---|
Given range:    |-------|