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
Quy tắc cho các tham số, bạn có thể cần điều chỉnh truy vấn cho phù hợp với mục đích của mình:
- Nếu start_date không phải là ngày bắt đầu theo quý chính xác, thì bắt đầu theo quý đó hiệu quả sẽ sử dụng ngày bắt đầu của quý chứa.
- Nếu end_date không phải là kết thúc quý chính xác thì chúng tôi sẽ kết thúc vào quý đã kết thúc TRƯỚC ngày end_date (không phải là quý có ngày kết thúc).