查找一组日期之间的季度结束日期 - Oracle SQL

Find Quarter End Date between a set of Date - Oracle SQL

我想看看是否可以在包含来自 table 的日期的字段中过滤掉季度结束日期列表。

下面是我用于获取一系列日期的代码,但我如何修改它以仅获取季度结束日期? 2017 年的示例 - 我希望它显示 2017-03-31,2017-06-31,2017-09-31,2017-12-31.

谢谢。

a.activity_date Between To_Date('2017-01-01', 'YYYY-MM-DD') and To_Date(Trunc(SysDate, 'Q') - 1)

我在想:

where activity_date >= date '2017-01-01' 
  and activity_date <  trunc(sysdate, 'q')
  and activity_date = trunc(activity_date, 'q') + interval '3' month - interval '1' day

前两个谓词是原始查询的改编版本(使用日期文字,而不是在 date 上使用 to_date())。作为第三个谓词的右操作数的表达式计算当前日期的季度末:逻辑是截断日期所属季度的开始,加上 3 个月,然后减去一天。我们可以使用该值进行过滤。

我们也可以用定制的 Oracle 日期算法来表达:

where activity_date >= date '2017-01-01' 
  and activity_date <  trunc(sysdate, 'q')
  and activity_date = add_months(trunc(activity_date, 'q'), 3) - 1