`

Oracle 相应时间计算

阅读更多
1、获得时间差毫秒数: 
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60 * 1000) 相差豪秒数 FROM DUAL; 
相差豪秒数 
---------- 
  86401000 
2、获得相差秒数: 
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60) 相差秒数 FROM DUAL; 
相差秒数 
---------- 
     86401 
3、获得相差分钟数、小时数,以此类推,默认时间相减获得相差的天数 

4、获得相差的月份数 
select (EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd'))) * 12 + 
       EXTRACT(month FROM to_date('2008-05-01','yyyy-mm-dd')) - EXTRACT(month FROM to_date('2008-04-30','yyyy-mm-dd')) months 
from dual; 
MONTHS 
---------- 
        13 
这里可以直接使用months_between函数 

5、获得相差的年份 
select EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) - EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd')) years from dual; 
YEARS 
---------- 
         1 

6、获得时间的方法: 

select sysdate,add_months(sysdate,12) from dual;  --加1年 
select sysdate,add_months(sysdate,1) from dual;   --加1月 
select sysdate,TO_CHAR(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1星期 
select sysdate,TO_CHAR(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1天 
select sysdate,TO_CHAR(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1小时 
select sysdate,TO_CHAR(sysdate+1/24/60,'yyyy-mm-dd HH23:MI:SS') from dual;  --加1分钟 
select sysdate,TO_CHAR(sysdate+1/24/60/60,'yyyy-mm-dd HH23:MI:SS') from dual;  --加1秒 
select   sysdate+7   from   dual;                     --加7天 
--将当前日期转换为上一个月 :
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'yyyymm')   FROM DUAL; --获取当前时间的前一个月 
select sysdate from dual; /**获取当前时间到秒**/ 
select  sysdate-3 from dual;/**获取当前2天**/ 
select round(sysdate)  as 格式成日期 from dual; 
select to_date('2008-9-2','yyyy_mm_dd') as 格式成日期 from dual; 
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'yyyymm') FROM DUAL; /**--获取当前时间的前一个月,正向后**/ 
Select last_day(sysdate) from dual;/**本月最受一天**/ 
/***分别取时间的年、月、日***/ 
Select to_char(sysdate,'YYYY') from dual; 
select to_char(sysdate,'mm') from dual; 
select to_char(sysdate,'dd') from dual; 

===================================================================
1。上月末天: 
SQL> select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual; 
LASTDAY 
---------- 
2005-05-31 

2。上月今天 
SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual; 
PRETODAY 
---------- 
2005-05-21 

3.上月首天 
SQL> select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual; 
FIRSTDAY 
---------- 
2005-05-01 

4.按照每周进行统计 
SQL> select to_char(sysdate,'ww') as week from dual group by to_char(sysdate,'ww'); 
WEEK 
-- 
09 

5。按照每月进行统计 
SQL> select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm'); 
TO 
-- 
06 

6。按照每季度进行统计 
SQL> select to_char(sysdate,'q') from dual group by to_char(sysdate,'q'); 
T 
- 
2 

7。按照每年进行统计 
SQL> select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy'); 
TO_C 
---- 
2005 

8.要找到某月中所有周五的具体日期 
select to_char(t.d,'YY-MM-DD') from ( 
select trunc(sysdate, 'MM')+rownum-1 as d 
from dba_objects 
where rownum < 32) t 
where to_char(t.d, 'MM') = to_char(sysdate, 'MM') --找出当前月份的周五的日期 
and trim(to_char(t.d, 'Day')) = '星期五' 
-------- 
03-05-02 
03-05-09 
03-05-16 
03-05-23 
03-05-30 

如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。 

9.oracle中时间运算 

内容如下: 
1、oracle支持对日期进行运算 
2、日期运算时是以天为单位进行的 
3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可 
4、进行时间进制转换时注意加括号,否则会出问题 

SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss'; 
会话已更改。 
SQL> set serverout on 
SQL> declare 
  2 DateValue date; 
  3 begin 
  4 select sysdate into DateValue from dual; 
  5 dbms_output.put_line('源时间:'||to_char(DateValue)); 
  6 dbms_output.put_line('源时间减1天:'||to_char(DateValue-1)); 
  7 dbms_output.put_line('源时间减1天1小时:'||to_char(DateValue-1-1/24)); 
  8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(DateValue-1-1/24-1/(24*60))); 
  9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*60))); 
10 end; 
11 / 
源时间:2003-12-29 11:53:41 
源时间减1天:2003-12-28 11:53:41 
源时间减1天1小时:2003-12-28 10:53:41 
源时间减1天1小时1分:2003-12-28 10:52:41 
源时间减1天1小时1分1秒:2003-12-28 10:52:40 

PL/SQL 过程已成功完成。 

在Oracle中实现时间相加处理 
-- 名称:Add_Times 
-- 功能:返回d1与NewTime相加以后的结果,实现时间的相加 
-- 说明:对于NewTime中的日期不予考虑 

create or replace function Add_Times(d1 in date,NewTime in date) return date 
is 
  hh   number; 
  mm   number; 
  ss   number; 
  hours number; 
  dResult  date;  
begin 
  -- 下面依次取出时、分、秒 
  select to_number(to_char(NewTime,'HH24')) into hh from dual; 
  select to_number(to_char(NewTime,'MI')) into mm from dual; 
  select to_number(to_char(NewTime,'SS')) into ss from dual; 
  -- 换算出NewTime中小时总和,在一天的百分几 
  hours := (hh + (mm / 60) + (ss / 3600))/ 24; 
  -- 得出时间相加后的结果 
  select d1 + hours into dResult from dual; 
  return(dResult); 
end Add_Times; 

-- 测试用例 
-- select Add_Times(sysdate,to_date('2004-12-06 03:23:00','YYYY-MM-DD HH24:MI:SS')) from dual 

Oracle支持日期计算,你可以创建诸如“日期1-日期2”这样的表达式来计算这两个日期之间的时间差。
为了得到数据差,你必须选择合适的时间度量单位,这样就可以进行数据格式隐藏。 
  
使用完善复杂的转换函数来转换日期是一个诱惑,但是你会发现这不是最好的解决方法。   
round(to_number(end-date-start_date))- 消逝的时间(以天为单位)   
round(to_number(end-date-start_date)*24)- 消逝的时间(以小时为单位)   
round(to_number(end-date-start_date)*1440)- 消逝的时间(以分钟为单位) 
  
显示时间差的默认模式是什么?为了找到这个问题的答案,让我们进行一个简单的SQL *Plus查询。 
  
SQL> select sysdate-(sysdate-3) from dual; 
  
SYSDATE-(SYSDATE-3) 
------------------- 
                   3    
这里,我们看到了Oracle使用天来作为消逝时间的单位,所以我们可以很容易的使用转换函数来把它转换成小时或者分钟。然而,当分钟数不是一个整数时,我们就会遇到放置小数点的问题。 
  
Select 
    (sysdate-(sysdate-3.111))*1440 
from 
    dual; 
  
(SYSDATE-(SYSDATE-3.111))*1440 
------------------------------ 
                     4479.83333    
当然,我们可以用ROUND函数(即取整函数)来解决这个问题,但是要记住我们必须首先把DATE数据类型转换成NUMBER数据类型。 
  
Select 
    round(to_number(sysdate-(sysdate-3.111))*1440) 
from 
    dual; 
  
ROUND(TO_NUMBER(SYSDATE-(SYSDATE-3.111))*1440) 
---------------------------------------------- 
                                           4480  
分享到:
评论

相关推荐

    Oracle_RAC安装配置指导书

    (3)通过并行执行技术提高事务响应时间----通常用于数据分析系统; (4)通过横向扩展提高每秒交易数和连接数----通常对于联机事务系统; (5)节约硬件成本,可以用多个廉价PC服务器代替昂贵的小型机或大型机,同时节约...

    Oracle性能优化

    在ORACLE中内存和我们在建数据库中的交换区进行数据的交换,读数据时,磁盘I/O必须等待物理I/O操作完成,在出现ORACLE的内存瓶颈时,我们第一个要考虑的是增加内存,由于I/O的响应时间是影响ORACLE性能的主要参数,...

    Oracle数据库中大型表查询优化研究

    本文结合实例着重对Oracle数据库中的查询优化进行了研究,测试结果表明采用的方法是很有效的,大大缩短了测试用例表的响应时间,最后对海量数据的优化方法提出了实用性的建议。 关键词:海量数据;Oracle数据库;...

    oracle9i实体化视图.

    而使用实体化视图来缩短查询响应时间。这将使数据库用户完全 无需知道存在哪些实体化视图。 实体化视图应看作是一种特殊的视图,它物理上存在于数据库内 部,可以包括联接和/或聚合。它能够在执行之前预先计算开销大...

    ORACLE9i_优化设计与系统调整

    §5.1.1 响应时间与吞吐量的折衷 82 §5.1.2 临界资源 83 §5.1.3 过度请求的影响 83 §5.1.4 调整以解决问题 83 §5.2 优化的执行者 84 §5.3 设置性能目标 84 第7章 系统优化方法 85 §6.1 何时优化效率最高 85 §...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...

    Oracle优化日记:一个金牌DBA的故事 白鳝.扫描版

    STATSPACK报告分析之共享池分析7月20日 重回沈阳优化小技巧 如何评估 优化效果优化小技巧 STATSPACK报告分析之undo分析优化小技巧 STATSPACK报告分析之锁分析7月21日 课堂风波优化小技巧 平均事务响应时间的计算优化...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    她从20世纪90年代初就开始使用Oracle,从事 Oracle的教学工作也已经超过10年的时间。她是Oracle ACE,也是OakTable(Oracle社区中著名的“Oracle科学家”的非正式组织)的成员,经常在技术会议上演讲。她的著作还...

    ORACLE数据库DBA面试集锦

     CBO尝试找到最低成本的访问数据的方法,为了最大的吞吐量或最快的初始响应时间,计算使用不同 的执行计划的成本,并选择成本最低的一个,关于表的数据内容的统计被用于确定执行计划。  4:如何定位重要(消耗资源多)...

    车辆管理系统(struts+hibernate+spring+oracle)130225.rar

    租赁记录的管理,包括租赁的开始和结束时间、租赁费用等。此外,系统还提供了权限管理功能,只有具有相应权限的用户才能进行相应的操作。系统的界面设计简洁明了,操作流程清晰易懂,无论是管理员还是普通用户都能...

    Java 响应式关系数据库连接了解一下

    响应式编程已经在 Java 编程领域出现很长一段时间了。具有高性能,事件驱动,充分利用计算资源,更加优雅的异步编程体验,同时它也提供了背压机制来防止系统过载。很长一段时间 Java 的响应式只能同 MongoDB、Redis ...

    J2EE spring mvc mybatis bootstrap HTML5 后台框架 控制台 oracle版本_spring3.0

    接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间 11. 发送邮件:单发,群发邮件 12. 置二维码:生成 or 解析二维码 13.地图工具:经纬度操作 14.即时通讯:打开即时聊天窗口 ...

    典型的南方食品:典型的南方食品是使用适用于Windows Server和Internet信息服务器(IIS)的最新(2020)ASP.NET,Oracle DB和实体框架技术构建的示例Web响应式(移动,平板电脑,PC)应用程序

    典型的Southern Foods是使用ASP.NET,Oracle 18c Database或Sql Server 2017和Entity Framework构建的示例应用程序。 哈维尔·卡农(JavierCañon)的哲学 亲吻通过设计和编程。 设计原则是“保持简单,愚蠢”或...

    万能后台管理模板javaweb

    11. 接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间 12. 发送邮件:单发,群发邮件 13. 置二维码:生成二维码图表保存到服务器 or 解析读取二维码内信息 14. 图表报表:...

    1操作系统复习.doc

    操作系统和应用软件在计算机中运行时,正确的是应用软件调用操作系统功能 操作系统中多任务处理的叙述中,前台任务和后台任务都能得到CPU的及时响应 当计算机内存不够时,系统可以自动"扩充"内存,为用户提供一个...

    SQL 优化原则

    ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 (4) 减少访问数据库的次数: ORACLE在内部执行了许多工作: 解析SQL语句, 估算索引的利用率,...

    软件工程图书馆管理系统课程设计报告.doc

    本系统在性能上力争达到响应时间短,具有一定的容错能力,力争减少由用户直接输 入数据,绝大多数据的输入都用可以选择的形式让用户进行选择。 本系统预计有如下输出: a).登陆成功显示:成功则进入主界面;失败则...

    软件工程图书馆管理系统课程设计报告(2).doc

    本系统在性能上力争达到响应时间短,具有一定的容错能力,力争减少由用户直接输 入数据,绝大多数据的输入都用可以选择的形式让用户进行选择。 本系统预计有如下输出: a).登陆成功显示:成功则进入主界面;失败则...

    软件工程图书馆管理系统课程设计报告(1).doc

    本系统在性能上力争达到响应时间短,具有一定的容错能力,力争减少由用户直接输 入数据,绝大多数据的输入都用可以选择的形式让用户进行选择。 本系统预计有如下输出: a).登陆成功显示:成功则进入主界面;失败则...

Global site tag (gtag.js) - Google Analytics