SQL'重叠'只获取开始和结束之间的日期(不包括开始和结束日期)

时间:2011-03-07 08:50:48

标签: ruby-on-rails ruby-on-rails-3

我使用此查询让对象重叠“ start_date ”和“ end_date ”之间的时间段,此外,我想获取日期结束的对象on start_date ,对象从end_date开始

我用

where("(start_date, end_date) overlaps (date ?, date ?), start_date, end_date"

但是对象的日期< = start_date > = end_date 获取。

这个'重叠'只会让对象的日期 start_date<日期< end_date ,而非“=”。

例如,start_date ='2011/2/1',end_date ='2011 / 3/31'。对象的日期结束于'2011/2/1'或从'2011/3/31'开始将不会得到,只有'2011/2/1'和'2011/3/31'之间的日期将得到。如何包含保存日期的对象在start_date结束并从end_date开始?

----------------------编辑--------------------- -------

我尝试使用:

where("(start_date, end_date) overlaps (date ?, date ?), start_date-1.day, end_date+1.day"

解决这个问题,但是当我喜欢上面的时候,如果start_date ='2011/2 / 1',则end_date ='2011/3/31',那么对象持有'2011/1/31'也会返回应该不应该得到。

3 个答案:

答案 0 :(得分:1)

在SQL方面,你想要生成这样的东西,假设

  • S1,E1是开始和结束日期 第一个范围,
  • S2,E2是开始和结束日期 第二个范围,
  • S1,E1,S2,E2均为NULL

    WHERE(S1,E1)重叠(S2,E2)或(E1 = S2)或(E2 = S1)

你需要两个“OR”条款,因为在一般情况下你不知道哪个范围更早。

答案 1 :(得分:0)

试试这个:

where("start_date >= ? and end_date <= ?", start_date.beginning_of_day, end_date.end_of_day)

应该包括从start_date到end_date的所有内容;-)希望它有所帮助!

答案 2 :(得分:0)

只是假设一个表详细信息并具有属性(包括日期),假设我想要从两个特定日期获取信息,从start_date到end_date。

所以, 详细信息。其中([“日期介于?和?”之间,start_date,end_date]) 将提供所需的信息,包括开始和结束日期。希望它有帮助