小编Tom*_*ler的帖子

如何使用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
Run Code Online (Sandbox Code Playgroud)

此表可以包含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_dateend_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_seriesPostgres功能可以帮助解决这个问题,但是如何解决?

sql postgresql activerecord dateinterval generate-series

-1
推荐指数
1
解决办法
694
查看次数