`
oboaix
  • 浏览: 276922 次
社区版块
存档分类
最新评论

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

 
阅读更多

   今日(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 varchar2
is
year_ number;
month_ number;
day_  number;
temp_date date;
date2 date:=d2;
date1 date:=d1;
begin
if 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日

 

 

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

 

  

分享到:
评论

相关推荐

    vb简易计时器

    1. **VB基本控件**:计时器(Timer)控件是VB中的一个关键元素,用于在指定间隔内触发事件。在本例中,我们可能会用到一个Label控件显示剩余时间,以及可能的CheckBox控件来切换声音设置。 2. **Timer控件**:VB的...

    VB书写的时钟小程序

    在本例中,"VB书写的时钟小程序"是一个利用VB编程语言编写的简单时钟应用,它实时显示当前时间,帮助用户了解VB编程的基础和如何处理时间日期相关的功能。 VB中的时钟程序通常会使用Windows Forms作为用户界面,并...

    C#定时每天00点00分00秒自动重启软件

    在这个实例中,我们添加了一个Timer控件,它被用来检测时间,并在达到指定的时间点(第二天的00:00:00)时触发重启操作。 2. **Tick 事件**: Timer控件的 `Tick` 事件在定时器间隔结束时发生。在本例中,`...

    cmd操作命令和linux命令大全收集

    copy 路径文件名1 路径文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件 copy c:srv.exe ipadmin$ 复制本地c:srv.exe到对方的admin下 copy 1st.jpg/b+2st.txt/a 3st....

Global site tag (gtag.js) - Google Analytics