Сложнее получить последний день квартала.
Это решение вычисляет начальный день диапазона, вычитая 9 месяцев из целевой даты, а затем обрезая маску 'Q'
, которая дает нам первый день квартала.Затем мы вычисляем эту дату снова , вычитаем один день, затем добавляем двенадцать месяцев, и это дает последний день текущего квартала:
with tgt as ( select date '2019-03-30' as dt from dual
union all select date '2019-02-28' as dt from dual
union all select date '2019-04-01' as dt from dual
)
select trunc(tgt.dt - interval '9' month, 'Q') as range_st,
(trunc(tgt.dt - interval '9' month, 'Q') - 1) + interval '12' month as range_end
from tgt
/
Там может быть более подходящее решение, ноэто конец моего перерыва на кофе:)