在计算月份的时候除了add_months,还可用INTERVAL:
Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 Connected as xxpo SQL> SQL> SELECT to_char(SYSDATE,'YYYY/MM/DD HH24:MI:SS') now FROM dual; NOW ------------------- 2011/05/20 06:22:00 SQL> SELECT to_char(add_months(SYSDATE,-1),'YYYY/MM/DD HH24:MI:SS') "1 month before" FROM dual; 1 month before ------------------- 2011/04/20 06:22:02 SQL> SELECT to_char(SYSDATE + INTERVAL '-1' MONTH,'YYYY/MM/DD HH24:MI:SS') "1 month before" FROM dual; 1 month before ------------------- 2011/04/20 06:22:04 SQL> SELECT to_char(SYSDATE + INTERVAL '1-1' YEAR TO MONTH,'YYYY/MM/DD HH24:MI:SS') "1 year and 1 month later" FROM dual; 1 year and 1 month later ------------------------ 2012/06/20 06:22:06 SQL> SELECT to_char(SYSDATE + INTERVAL '-1-1' YEAR TO MONTH,'YYYY/MM/DD HH24:MI:SS') "1 year and 1 month before" FROM dual; 1 year and 1 month before ------------------------- 2010/04/20 06:22:08 SQL>