我使用此查询让对象重叠“ 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'也会返回应该不应该得到。
答案 0 :(得分:1)
在SQL方面,你想要生成这样的东西,假设
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]) 将提供所需的信息,包括开始和结束日期。希望它有帮助