Генерировать диапазон дат за год

Я хочу сгенерировать диапазон дат между усечением ("01.07.2014", "мм / дд / гггг") и усечением (sysdate-1)+0,99999 (с 01.07.2014 до вчерашней полуночи) в год.

пожалуйста, обратитесь к приложенному изображению для ожидаемого результата ( )

1 ответ

Что-то вроде этого. Адаптируйте по мере необходимости. Вы, вероятно, не будете select * from ranges но вместо этого вы будете использовать диапазоны везде, где вам нужно. Дата ввода dt, выбранный из таблицы input_date в моем решении, вместо этого может быть переменная связывания в вашем приложении и т. д. Надеюсь, что вы сможете самостоятельно определить настройки; если нет, пожалуйста, напишите обратно.

with
     input_date ( dt ) as (
       select to_date('07/01/2014', 'mm/dd/yyyy')
       from   dual
     ),
     ranges ( date_from, date_to ) as (
       select add_months(dt, 12 * (level - 1)) + level - 1,
              least(trunc(sysdate), add_months(dt, 12 * level) + level - 1)
       from   input_date
       connect by add_months(dt, 12 * (level - 1)) + level - 1 <= trunc(sysdate)
     )
select * from ranges
;

DATE_FROM   DATE_TO
----------  ----------
07/01/2014  07/01/2015
07/02/2015  07/02/2016
07/03/2016  11/28/2016
Другие вопросы по тегам