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

 更新时间:2013年09月09日 10:14:39   作者:  
本文为大家介绍下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

相关文章

  • 使用Oracle操作xml格式数据的方法

    使用Oracle操作xml格式数据的方法

    这篇文章主要介绍了使用Oracle操作xml格式数据的方法,Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库,需要的朋友可以参考下
    2023-07-07
  • Oracle undo_management参数不一致错误

    Oracle undo_management参数不一致错误

    因RAC的undo_management参数不一致导致Oracle数据库mount报ORA-01105 ORA-01606错误,本文就这个问题
    2013-11-11
  • Oracle生成单据编号存储过程的实例代码

    Oracle生成单据编号存储过程的实例代码

    Oracle生成单据编号存储过程,在做订单类似的系统都可能会存在订单编号不重复,或是流水号按日,按年,按月进行重新编号。下面给大家分享oracle生成单据编号存储过程,需要的的朋友参考下吧
    2017-04-04
  • Oracle 左连接(+)加号用法及常用语法之间的关系

    Oracle 左连接(+)加号用法及常用语法之间的关系

    通过分析左连接(+)加号的写法和一些常用语法之间的联系,了解到Oracle 加号(+)的用法。本文重点给大家介绍Oracle 左连接(+)加号用法及常用语法之间的关系 ,感兴趣的朋友跟随小编一起看看吧
    2018-10-10
  • Oracle11g RAC开启关闭、设置归档小结

    Oracle11g RAC开启关闭、设置归档小结

    这篇文章主要介绍了Oracle11g RAC开启关闭、设置归档,很简单,但很实用,需要的朋友可以参考下
    2014-09-09
  • ORACLE 报警日志如何查看?

    ORACLE 报警日志如何查看?

    目得:首先了解什么是外部表,与其它表的区别,建立一个简单的外部表(主要看操作过程),最后我们用外部表查看ORACLE报警日志
    2009-06-06
  • Oracle数据库不同损坏级别的恢复教程

    Oracle数据库不同损坏级别的恢复教程

    这篇文章主要给大家介绍了关于Oracle数据库不同损坏级别的恢复教程,文中通过示例代码介绍的非常详细,对大家学习或者使用Oracle数据库具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • Oracle中的MD5加密详解

    Oracle中的MD5加密详解

    MD5是我们常用的一种加密方式,在各个方面都有用到这个加密方式,今天我们来探讨下在Oracle中如何使用MD5加密
    2014-09-09
  • Oracle 11gR2中启动Scott用户的方法(推荐)

    Oracle 11gR2中启动Scott用户的方法(推荐)

    这篇文章主要介绍了Oracle 11gR2中启动Scott用户的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • Oracle计算时间差常用函数

    Oracle计算时间差常用函数

    这篇文章主要介绍了Oracle计算时间差常用函数,涉及用法代码及示例,具有一定参考价值。需要的朋友可以了解下。
    2017-09-09

最新评论