0% found this document useful (1 vote)
2K views

How To Calculate Difference Between Dates in Oracle SQL

If we want to show the number of years and months between two dates, we can do something like this: SQL> SELECT 2 3 num_years 4 num_months 5 FROM.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (1 vote)
2K views

How To Calculate Difference Between Dates in Oracle SQL

If we want to show the number of years and months between two dates, we can do something like this: SQL> SELECT 2 3 num_years 4 num_months 5 FROM.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 2

Example # 1: How to get the number of days between two dates

SQL> SELECT TO_DATE('20120125', 'YYYYMMDD') - TO_DATE('20120120', 'YYYYMMDD') day_diff FROM dual


DAY_DIFF
---------5

Example # 2: How to get number of months between two dates


SQL> SELECT
2
3 FROM

MONTHS_BETWEEN(TO_DATE('20120325', 'YYYYMMDD'), TO_DATE('20120101', 'YYYYMMDD')) num_months


,(TO_DATE('20120325', 'YYYYMMDD') - TO_DATE('20120101', 'YYYYMMDD')) diff_in_days
dual

NUM_MONTHS
---------2.77419354

DIFF_IN_DAYS
-----------84

Using plain math to get the number of months between two dates
SQL> SELECT
2
3 FROM

TRUNC((TO_DATE('20120325', 'YYYYMMDD') - TO_DATE('20120101', 'YYYYMMDD')) / 30) num_months


,(TO_DATE('20120325', 'YYYYMMDD') - TO_DATE('20120101', 'YYYYMMDD')) diff_in_days
dual

NUM_MONTHS
---------2

DIFF_IN_DAYS
-----------84

Using the EXTRACT function


SQL> SELECT
TO_DATE('20120101', 'YYYYMMDD') start_date
2
,TO_DATE('20120325', 'YYYYMMDD') end_date
3
,(TO_DATE('20120325', 'YYYYMMDD') - TO_DATE('20120101', 'YYYYMMDD')) diff_in_days
4
,EXTRACT(MONTH FROM TO_DATE('20120101', 'YYYYMMDD')) start_month
5
,EXTRACT(MONTH FROM TO_DATE('20120325', 'YYYYMMDD')) end_month
6
,(EXTRACT(MONTH FROM TO_DATE('20120325', 'YYYYMMDD')) - EXTRACT(MONTH FROM TO_DATE('20120101', 'YYYYMMDD')))
diff_in_months
7 FROM
dual
START_DATE
----------1/1/2012

END_DATE
----------3/25/2012

DIFF_IN_DAYS
-----------84

START_MONTH
----------1

END_MONTH
---------3

DIFF_IN_MONTHS
-------------2

Example # 3: How to get the number of years and months between two dates
SQL> SELECT
2
3 FROM

TRUNC(MONTHS_BETWEEN(TO_DATE('20120325', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD')))


,(TO_DATE('20120325', 'YYYYMMDD') - TO_DATE('20100101', 'YYYYMMDD')) diff_in_days
dual

TRUNC(MONTHS_B
-----------------------------26

DIFF_IN_DAYS
-----------814

But, if we want to show the number of years as well, we can do something like this:
SQL> SELECT
2
3
num_years
4
num_months
5 FROM

(TO_DATE('20120525', 'YYYYMMDD') - TO_DATE('20100101', 'YYYYMMDD')) diff_in_days


,TRUNC(MONTHS_BETWEEN(TO_DATE('20120525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD')))
,TRUNC(TRUNC(MONTHS_BETWEEN(TO_DATE('20120525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD'))) / 12)

DIFF_IN_DAYS
-----------875

TRUNC(MONTHS_B
-----------------------------28

,MOD(TRUNC(MONTHS_BETWEEN(TO_DATE('20120525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD'))), 12)


dual
NUM_YEARS
---------2

NUM_MONTHS
---------4

Another way to do show the number of years and months could be something like this:
SQL> SELECT
TO_DATE('20100101', 'YYYYMMDD') start_date
2
,TO_DATE('20120525', 'YYYYMMDD') end_date
3
,(TO_DATE('20120525', 'YYYYMMDD') - TO_DATE('20100101', 'YYYYMMDD')) diff_in_days
4
,EXTRACT(YEAR FROM TO_DATE('20100101', 'YYYYMMDD')) start_month
5
,EXTRACT(YEAR FROM TO_DATE('20120525', 'YYYYMMDD')) end_month
6
,EXTRACT(MONTH FROM TO_DATE('20100101', 'YYYYMMDD')) start_month
7
,EXTRACT(MONTH FROM TO_DATE('20120525', 'YYYYMMDD')) end_month
8
,(EXTRACT(YEAR FROM TO_DATE('20120525', 'YYYYMMDD')) - EXTRACT(YEAR FROM TO_DATE('20100101', 'YYYYMMDD')))
diff_in_years

9
,(EXTRACT(MONTH FROM TO_DATE('20120525', 'YYYYMMDD')) - EXTRACT(MONTH FROM TO_DATE('20100101', 'YYYYMMDD')))
diff_in_months
10 FROM
dual
START_DATE END_DATE DIFF_IN_DAYS START_MONTH END_MONTH START_MONTH END_MONTH DIFF_IN_YEARS DIFF_IN_MONTHS
----------- ----------- ------------ ----------- ---------- ----------- ---------- ------------- -------------1/1/2010 5/25/2012
875
2010
2012
1
5
2
4

More info see:


http://oracletuts.net/tutorials/how-to-calculate-difference-between-dates-in-oracle-sql/
It is the best and simple formula to calculate Years, Months, Days between two dates
SELECT TRUNC (MONTHS_BETWEEN (:end_date, :start_date) / 12) YEARS,
MOD (TRUNC (MONTHS_BETWEEN (:end_date, :start_date)), 12) MONTHS,
( TO_DATE (:end_date) - ADD_MONTHS (:start_date, TRUNC (MONTHS_BETWEEN (:end_date, :start_date)))) DAYS
FROM DUAL;

You might also like