我需要得到两个日期之间的差额,例如,如果差额是84天,我可能应该将结果输出为2个月和14天,我刚才的代码给出了总计。这是代码
SELECT Months_between(To_date('20120325', 'YYYYMMDD'), To_date('20120101', 'YYYYMMDD')) num_months, ( To_date('20120325', 'YYYYMMDD') - To_date('20120101', 'YYYYMMDD') ) diff_in_days FROM dual;
输出为:
NUM_MONTHS DIFF_IN_DAYS 2.774193548 84
例如,我需要将此查询的输出在最坏的情况下设为2个月和14天,否则我不介意是否可以在月份数字之后得到确切的天数,因为那几天实际上不是14天,因为所有月份都没有30天。
select dt1, dt2, trunc( months_between(dt2,dt1) ) mths, dt2 - add_months( dt1, trunc(months_between(dt2,dt1)) ) days from ( select date '2012-01-01' dt1, date '2012-03-25' dt2 from dual union all select date '2012-01-01' dt1, date '2013-01-01' dt2 from dual union all select date '2012-01-01' dt1, date '2012-01-01' dt2 from dual union all select date '2012-02-28' dt1, date '2012-03-01' dt2 from dual union all select date '2013-02-28' dt1, date '2013-03-01' dt2 from dual union all select date '2013-02-28' dt1, date '2013-04-01' dt2 from dual union all select trunc(sysdate-1) dt1, sysdate from dual ) sample_data
结果:
| DT1 | DT2 | MTHS | DAYS | ---------------------------------------------------------------------------- | January, 01 2012 00:00:00 | March, 25 2012 00:00:00 | 2 | 24 | | January, 01 2012 00:00:00 | January, 01 2013 00:00:00 | 12 | 0 | | January, 01 2012 00:00:00 | January, 01 2012 00:00:00 | 0 | 0 | | February, 28 2012 00:00:00 | March, 01 2012 00:00:00 | 0 | 2 | | February, 28 2013 00:00:00 | March, 01 2013 00:00:00 | 0 | 1 | | February, 28 2013 00:00:00 | April, 01 2013 00:00:00 | 1 | 1 | | August, 14 2013 00:00:00 | August, 15 2013 05:47:26 | 0 | 1.241273 |
链接测试:SQLFiddle