我有如下表:如何使用Postgres只使用一條語句來返回兩列之間的一系列日期?
create_table "activities", force: :cascade do |t|
...
t.date "start_date", null: false
t.time "start_time", null: false
t.date "end_date", null: false
t.time "end_time", null: false
...
end
這個表可以有活動,start_date
等於end_date
,並在不同的日期比start_date
結束的其他活動。
我想要做的是建立一個SQL查詢,將返回所有日期兩個日期之間的一些活動。
例如:
Activity 1: start_date: 2015-04-15, end_date: 2015-04-15
Activity 2: start_date: 2015-04-16, end_date: 2015-04-18
查詢將接收兩個參數:start_date
和end_date
,例如:
start_date: 2015-04-01
end_date: 2015-04-30
和執行將返回所有日期與這兩個日期之間的活動。在結果上面的例子將是:
- 2015年4月15日
- 2015年4月16日
- 2015年4月17日
- 2015年4月18日
該應用程序使用Ruby on Rails編寫,Postgres中包含數據庫。這可以使用Ruby代碼來解決,但我不希望出於性能方面的考慮。
如何使用Postgres中的一條SQL語句實現此查詢?我認爲generate_series
Postgres函數可以幫助解決這個問題,但是如何?