2011-03-07 16 views
0

我使用這個查詢來獲取對象重疊之間「起始日期」和「END_DATE」期間,而且,我想獲取日期對象結束於開始日期和對象開始結束日期SQL「重疊」只得到起點和終點之間的日期(不包括開始和結束日期)

我用

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

但對象有特定日期< =起始日期> = END_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" 

來解決這個問題,但是當我做類似上面,如果開始= '2011/2/1' 日期,結束日期='2011/3/31',那麼對象持有'2011/1/31'也返回,這應該不會得到。

回答

0

試試這個:

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

應包括所有從START_DATE至END_DATE ;-)希望它幫助!

+0

謝謝,但它沒有幫助... – Mellon 2011-03-07 09:12:54

+0

你沒有得到你想要的日期範圍? – Staelen 2011-03-07 09:14:01

+0

如果設置了start_date ='2011/2/1'和end_date ='2011/3',我想要的是對象保存日期從'2011/1/1'到'2011/2/1'將返回/ 31',這就是爲什麼我使用'重疊' – Mellon 2011-03-07 09:15:01

0

假設一個表的詳細信息和具有屬性(包括日期),假設我想從兩個特定日期的信息從start_date到end_date。

so, 詳情。 其中([「之間的日期?和?」,日期,結束日期]) 將給予必要的信息,包括開始和結束dates.Hope它有助於

+0

謝謝你,但是,我想要的是不是從一個確切的時間段獲取對象。如果我設置了start_date ='2011/2/1'和end_date ='2011/2/1',那麼我想要的是從'2011/1/1'到'2011/2/1' 3/31',這就是爲什麼我使用'重疊' – Mellon 2011-03-07 09:35:23

1

SQL一邊,要產生這樣的事情,假設

  • S1,E1是 第一個範圍的開始和結束日期,
  • S2,E2是 第二範圍的開始和結束日期,
  • 無S1,E1的, S2,E2是NULL

    WHERE(S1,E1)重疊(S2,E2)OR(E1 = S2)OR(E2 = S1)

你既需要 「OR」 的條款,因爲在一般情況下,你不不知道哪個範圍更早。

相關問題