Postgres generate_series 不包括日期范围

Eri*_*ari 5 postgresql date generate-series

我正在创建一个订阅管理系统,需要生成未来 2 年即将到来的计费日期列表。我已经能够使用 generate_series 来获取适当的日期:

SELECT i::DATE
FROM generate_series('2015-08-01', '2017-08-01', '1 month'::INTERVAL) i
Run Code Online (Sandbox Code Playgroud)

我需要采取的最后一步是从计算中排除特定的日期范围。这些排除的日期范围可以是任何时间范围。此外,它们不应计入 generate_series 的时间范围内。

例如,假设我们有一个从“2015-08-27”到“2015-09-03”的日期范围排除。生成的 generate_series 应该从计算中排除那一周的日期,并且基本上将所有未来月份的计费日期推到未来一周

2015-08-01
2015-09-10
2015-10-10
2015-11-10
2015-12-10
Run Code Online (Sandbox Code Playgroud)

Bra*_*ash 0

您必须拆分调用才能生成排除序列。像这样的事情:

  • 3 个查询的并集
  • 第一个查询提取从开始到排除范围的日期
  • 第二个查询提取排除范围和结束日期之间的日期
  • 第三个查询在您的系列日期均未跨越排除范围时提取日期

注意:您仍然需要一种方法来循环排除列表(如果有)。此外,此查询可能不是很有效,因为可以通过函数或过程代码更好地处理此类场景。