Oracle Dual Table Query To Create Quarters
SELECT
 q_tab.v_val month_no,
 DECODE(GREATEST(q_tab.v_val,4), q_tab.v_val,
   DECODE(GREATEST(q_tab.v_val,7), q_tab.v_val,
     DECODE(GREATEST(q_tab.v_val,10), q_tab.v_val,4,3),2),1)  Quarter
FROM
  (SELECT LEVEL v_val FROM DUAL
   CONNECT BY LEVEL <=12) q_tab;

-- For months greater than 12 this query splits months into 
-- q1 -> 1-3
-- q2 -> 4-6
-- q3 -> 7-9
-- q4 -> 10-12
-- using MOD(months, 12)

SELECT q_tab.v_month month_no,
 DECODE(q_tab.v_val,0, 4,
  DECODE(GREATEST(q_tab.v_val,4), q_tab.v_val,
   DECODE(GREATEST(q_tab.v_val,7), q_tab.v_val,
     DECODE(GREATEST(q_tab.v_val,10),
       q_tab.v_val,4,3),2),1))  Quarter
FROM
  (SELECT LEVEL v_month, MOD(LEVEL,12) v_val
   FROM DUAL
   CONNECT BY LEVEL <= &i_months) q_tab
;

Quarter Analysis Using LEAST

Quarter and Gregorian Calendar Dates

Oracle Functions Index

Oracle registered trademark of Oracle Corporation.
Last Revised On: October 07th, 2013