首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

获取指定日期间距简易一例

2012-07-02 
获取指定日期间隔简易一例?? 今日(2011-12-27)一哥们(Oracle 10.2.0)碰到一Oracle间隔日期计算问题,原意是

获取指定日期间隔简易一例

?? 今日(2011-12-27)一哥们(Oracle 10.2.0)碰到一Oracle间隔日期计算问题,原意是给出两个日期,获取两个日期之间的间隔数值,返回形如格式:x年x月x日,类似倒计时工具计时器。这里权当作个记录,当时使用到了Oracle 数据类型interval来做处理,因为参数传递的问题,没有奏效,最后使用内置函数解决,这里仅此作个记录,下次留用。主要是要考虑到闰年、闰月、每个月的不同天数问题。,贴出函数脚本

?

?

create or replace function fn_interval_ymd(d2 date,d1 date) return varchar2isyear_ number;month_ number;day_  number;temp_date date;date2 date:=d2;date1 date:=d1;beginif date1-date2>0 then  temp_date:=date2;  date2:=date1;  date1:=temp_date;end if;year_ :=floor(months_between(date2,date1)/12);month_:=floor(months_between(date2,(date1+NUMTOYMINTERVAL(year_, 'year'))));day_ :=date2-((date1+NUMTOYMINTERVAL(year_, 'year'))+NUMTOYMINTERVAL(month_, 'month'));return lpad(year_,4,'0')||'年'||lpad(month_,2,'0')||'月'||lpad(day_,2,'0')||'日';exception when others then dbms_output.put_line('Input date format exception!'); return '';end;

?

测试效果:

select fn_interval_ymd(sysdate,sysdate-1000) from dual;----------0002年08月26日----------select fn_interval_ymd(to_date('2008-05-01','yyyy-mm-dd'),to_date('2006-04-21','yyyy-mm-dd')) from dual;0002年00月10日----------select fn_interval_ymd(to_date('2008-02-11','yyyy-mm-dd'),to_date('2008-03-05','yyyy-mm-dd')) from dual;----------0000年00月23日

?

?

?健壮性效果不知道到底如何,还要进一步测试。

?

??

热点排行