你可以试试这个months_between
功能。它将计算两个日期之间的月数,作为十进制数。
select months_between(sysdate+30, sysdate ) from dual;
select months_between(sysdate+15, sysdate ) from dual;
在此示例中,第一个参数大于第二个参数,因此它将返回 1。第二行返回 ~0.48(在 2010 年 9 月 1 日上午 11:30 左右执行时)要获取实际日期值:
select case when months_between(sysdate+30, sysdate ) > 0 then sysdate+30 else sysdate end from dual;
一般来说:
case when months_between(dateA, dateB ) > 0 then dateA else dateB
更新:
经过一些实验,这个函数的最细粒度似乎是 Day。
select months_between(to_date('2010-10-16 23:59:59', 'YYYY-MM-DD HH24:MI:SS'),
to_date('2010-10-16 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
from dual;
...将返回 0
但
select months_between(to_date('2010-10-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS'),
to_date('2010-10-16 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
from dual;
将返回 0.032258064516129。
其他一些有趣的日期差异/比较技术:http ://www.orafaq.com/faq/how_does_one_get_the_time_difference_between_two_date_columns