zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

oracle获取上一旬的开始时间和结束时间的实现函数

Oracle 实现 函数 获取 时间 开始 结束
2023-06-13 09:15:05 时间
复制代码代码如下:

--获取上旬开始时间
createorreplacefunctionfd_lastxunstart(rqindate)returnstringis
refstrvarchar2(50);
v_rqdate;
begin
--获取上一旬的日期
v_rq:=trunc(rq);
selectcasedecode(trunc((to_char(v_rq,"dd")-1)/10),
0,
"上旬",
1,
"中旬",
"下旬")
when"上旬"then--返回上个月的下旬
to_char(add_months(v_rq,-1),"yyyyMM")||"21"
when"中旬"then
to_char(v_rq,"yyyymm")||"01"else 
to_char(v_rq,"yyyymm")||"11"
end
intorefstr
fromdual;
returnrefstr;
endfd_lastxunstart;

--这个返回的是:上旬的开始日期
selectsysdatefromdual;
selectfd_lastxunstart(sysdate)fromdual;
selectfd_lastxunstart(to_date("20130305","yyyymmdd"))fromdual;
selectfd_lastxunstart(to_date("20130311","yyyymmdd"))fromdual;
selectfd_lastxunstart(to_date("20130325","yyyymmdd"))fromdual;

--执行结果为:2013/9/512:08:39、20130821、20130221、20130301、20130311

----获取上一旬的结束日期
--传递进去一个date类型的值,返回一个varchar类型的上旬结束日期
createorreplacefunctionfd_lastxunend(rqindate)returnstringis
refstrvarchar2(50);
v_rqdate;
begin
--获取上一旬的日期
v_rq:=trunc(rq);
selectcasedecode(trunc((to_char(v_rq,"dd")-1)/10),
0,
"上旬",
1,
"中旬",
"下旬")
when"上旬"then--返回上个月的最后1天
--chr(39)这个是加引号
to_char(last_day(add_months(v_rq,-1))+1-1/24/60/60,
"yyyymmdd")
when"中旬"then
to_char(v_rq,"yyyymm")||"10"else 
to_char(v_rq,"yyyymm")||"20"
end
intorefstr
fromdual;
returnrefstr;
endfd_lastxunend;

--这个获取的是:上旬的结束日期
selectfd_lastxunend(sysdate)fromdual;
selectfd_lastxunend(to_date("20130305","yyyymmdd"))fromdual;
selectfd_lastxunend(to_date("20130311","yyyymmdd"))fromdual;
selectfd_lastxunend(to_date("20130315","yyyymmdd"))fromdual;
selectfd_lastxunend(to_date("20130221","yyyymmdd"))fromdual;

--执行结果:20130831、20130228、20130310、20130310、20130220

--观察1/24/60/60的作用这个是一秒
selectlast_day(add_months(trunc(sysdate),-1))+1-1/24/60/60
fromdual;
selectlast_day(add_months(trunc(sysdate),-1))fromdual;
selectlast_day(add_months(trunc(sysdate),-1))+1fromdual;
--执行结果:2013/8/3123:59:59、2013/8/31、2013/9/1