SELECT ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL-1) ) AS qstart
, ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL) ) -1 AS qend
FROM ( SELECT TO_DATE('&start_date') AS start_date
, TO_DATE('&end_date') AS end_date
FROM DUAL
) PARAM
CONNECT BY ADD_MONTHS( TRUNC(PARAM.start_date, 'Q'), 3*(LEVEL) ) -1
<= PARAM.end_date
Правила за параметри, може да се наложи да коригирате заявката, за да отговаря на вашите цели:
- Ако start_date не е точното начало на тримесечието, то ефективно използва началната дата на тримесечието.
- Ако end_date не е точният край на тримесечието, тогава приключваме на тримесечието, което е приключило ПРЕДИ end_date (не това, което съдържа крайна дата).