各位:
今天遇到个问题
select months_between(lase_day(sysdate),to_Date('20120129','yyyymmdd')) from dual = 1
select months_between(lase_day(sysdate),to_Date('20120130','yyyymmdd')) from dual = 0.989
select months_between(lase_day(sysdate),to_Date('20120131','yyyymmdd')) from dual = 1为什么中间那个值小于1 而最后一个值又等于1?
今天遇到个问题
select months_between(lase_day(sysdate),to_Date('20120129','yyyymmdd')) from dual = 1
select months_between(lase_day(sysdate),to_Date('20120130','yyyymmdd')) from dual = 0.989
select months_between(lase_day(sysdate),to_Date('20120131','yyyymmdd')) from dual = 1为什么中间那个值小于1 而最后一个值又等于1?
如果d1和d2是月份中相同的一天,或都是这个月的最后一天,则会返回整数。
否则会返回带小数的结果。
或者都是某个月的最后一天(你第三条sql),
返回一个整数,否则(你第二条sql),
返回数值带小数,以每天1/31月来计算月中剩余天数。
如此明白否?
Oracle calculates the fractional portion of the result based on a 31-day month and considers the difference in time components date1 and date2.
也就是 2月6日减去1月30日的天数除以31 PS:我做了下实验,由结果猜测,这个函数计算的精度远不只“天”高MONTHS_BETWEEN(LAST_DAY(SYSDATE),TO_DATE('20120130','YYYYMMDD'))
----------------------------------------------------------------
.990739247SQL> /MONTHS_BETWEEN(LAST_DAY(SYSDATE),TO_DATE('20120130','YYYYMMDD'))
----------------------------------------------------------------
.990742608SQL> /MONTHS_BETWEEN(LAST_DAY(SYSDATE),TO_DATE('20120130','YYYYMMDD'))
----------------------------------------------------------------
.990742981SQL> /MONTHS_BETWEEN(LAST_DAY(SYSDATE),TO_DATE('20120130','YYYYMMDD'))
----------------------------------------------------------------
.990743354SQL>