服务器之家

服务器之家 > 正文

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

时间:2019-12-01 16:09     来源/作者:oracle教程网

代码如下:


-- 获取上旬开始时间 
create or replace function fd_lastxunstart(rq in date) return string is 
refstr varchar2(50); 
v_rq date; 
begin 
--获取上一旬的日期 
v_rq := trunc(rq); 
select case decode(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 
into refstr 
from dual; 
return refstr; 
end fd_lastxunstart; 

-- 这个返回的是:上旬的开始日期 
select sysdate from dual; 
select fd_lastxunstart(sysdate) from dual; 
select fd_lastxunstart(to_date('20130305','yyyymmdd')) from dual; 
select fd_lastxunstart(to_date('20130311','yyyymmdd')) from dual; 
select fd_lastxunstart(to_date('20130325','yyyymmdd')) from dual; 

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

---- 获取上一旬的结束日期 
-- 传递进去 一个 date 类型的值,返回一个varchar类型的上旬结束日期 
create or replace function fd_lastxunend(rq in date) return string is 
refstr varchar2(50); 
v_rq date; 
begin 
--获取上一旬的日期 
v_rq := trunc(rq); 
select case decode(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 
into refstr 
from dual; 
return refstr; 
end fd_lastxunend; 

-- 这个获取的是:上旬的结束日期 
select fd_lastxunend(sysdate) from dual; 
select fd_lastxunend(to_date('20130305','yyyymmdd')) from dual; 
select fd_lastxunend(to_date('20130311','yyyymmdd')) from dual; 
select fd_lastxunend(to_date('20130315','yyyymmdd')) from dual; 
select fd_lastxunend(to_date('20130221','yyyymmdd')) from dual; 

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

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

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部