I think add_months will do the job.
See below:
Code:
SQL> select * from t1 order by rdate ;
RDATE ID
----------- ----------
05-JUL-2006 5
03-OCT-2006 3
23-OCT-2006 2
22-NOV-2006 1
20-JUL-2007 4
SQL> var d1 varchar2(30);
SQL> exec :d1 := sysdate ;
PL/SQL procedure successfully completed.
SQL> select t1.*, :d1 from t1
2 where rdate between add_months(:d1, -6) and :d1 ;
RDATE ID :D1
----------- ---------- --------------------------------
22-NOV-2006 1 01-JAN-2007
23-OCT-2006 2 01-JAN-2007
03-OCT-2006 3 01-JAN-2007
05-JUL-2006 5 01-JAN-2007
SQL> exec :d1 := sysdate+350 ;
PL/SQL procedure successfully completed.
SQL> select t1.*, :d1 from t1
2 where rdate between add_months(:d1, -6) and :d1 ;
RDATE ID :D1
----------- ---------- --------------------------------
20-JUL-2007 4 17-DEC-2007
Tamil