MONTHS BETWEEN Function
In Oracle/PLSQL, the months_between function returns the number of months between date1 and date2.
In Oracle/PLSQL, the months_between function returns the number of months between date1 and date2.
The syntax for the months_between function is:
months_between( date1, date2 )
date1 and date2 are the dates used to calculate the number of months.
If a fractional month is calculated, the months_between function calculates the fraction based on a 31-day month.
Applies To:
- Oracle 8i, Oracle 9i, Oracle 10g, Oracle 11g
Example #1:
months_between (to_date ('2003/01/01', 'yyyy/mm/dd'), to_date ('2003/03/14', 'yyyy/mm/dd') )
would return -2.41935483870968
Example #2
months_between (to_date ('2003/07/01', 'yyyy/mm/dd'), to_date ('2003/03/14', 'yyyy/mm/dd') )
would return 3.58064516129032
Example #3
months_between (to_date ('2003/07/02', 'yyyy/mm/dd'), to_date ('2003/07/02', 'yyyy/mm/dd') )
would return 0
Example #4
months_between (to_date ('2003/08/02', 'yyyy/mm/dd'), to_date ('2003/06/02', 'yyyy/mm/dd') )
would return 2
If
you need the number of months, you need to use this function.
The syntax for the function is:
MONTHS_BETWEEN(date1, date2)
SQL> SELECT MONTHS_BETWEEN('01-JAN-01','01AUG01') AS MONTHS_BETWEEN FROM Dual
MONTHS_BETWEEN
--------------
-7
Experimenting with MONTHS_BETWEEN.
SQL> SELECT MONTHS_BETWEEN('25-DEC-97','02-JUN-97') "Fractional", MONTHS_BETWEEN('02-FEB-97','02-JUN-97') "Integer" from DUAL;
Fractional Integer
---------- ----------
6.74193548 -4
SQL> SELECT MONTHS_BETWEEN('25-MAY-2005', '15-JAN-2005') FROM dual;
MONTHS_BETWEEN('25-MAY-2005','15-JAN-2005')
-------------------------------------------
4.32258065
SELECT
MONTHS_BETWEEN(TO_DATE('22SEP2006','ddMONyyyy'),
2 TO_DATE('13OCT2001','ddMONyyyy')) "Months difference"
3 FROM dual;
Months difference
-----------------
59.2903226
CREATE
TABLE product (
2 product_name VARCHAR2(25),
3 product_price NUMBER(4,2),
4 quantity_on_hand NUMBER(5,0),
5 last_stock_date DATE);
Table created.
SQL> INSERT INTO product VALUES ('Small Widget', 99, 1, '15-JAN-03');
1 row created.
SQL> INSERT INTO product VALUES ('Medium Widget', 75, 1000, '15-JAN-02');
1 row created.
SQL> INSERT INTO product VALUES ('Product Number', 50, 100, '15-JAN-03');
1 row created.
SQL> INSERT INTO product VALUES ('Round Church Station', 25, 10000, null);
1 row created.
SQL> SELECT product_name,
2 last_stock_date,
3 MONTHS_BETWEEN(SYSDATE, last_stock_date) STOCK_MONTHS
4 FROM product;
PRODUCT_NAME LAST_STOC STOCK_MONTHS
------------------------- --------- ------------
Small Widget 15-JAN-03 65.1540293
Medium Widget 15-JAN-02 77.1540293
Product Number 15-JAN-03 65.1540293
Round Church Station
SQL> select months_between( sysdate, date'1971-05-18' )
2 from dual;
MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18')
----------------------------------------
444.958945
SQL> SELECT MONTHS_BETWEEN(TO_DATE(TO_CHAR(TO_DATE('&date1'),
2 'mmyyyy'), 'mmyyyy'),
3 TO_DATE(TO_CHAR(TO_DATE('&date2'), 'mmyyyy'),
4 'mmyyyy')) Diff_Date
5 FROM DUAL;