`

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数据库服务器IO高的分析方案.docx

    在AIX环境中,可以通过`avwait`和`avserv`两列的和来计算IO响应时间;而在Linux环境中,则主要关注`AVWAIT`列。 - **示例**:假设`sar –d`输出结果显示某个磁盘设备的平均IO响应时间远超20毫秒,这可能表明存在...

    oracle essbase and oracle olap

    2. **高性能计算**:Essbase 设计用于处理大量数据,支持实时分析,能快速响应复杂查询,提供近乎即时的洞察。 3. **灵活的数据集成**:Essbase 可以与各种数据源集成,包括 Oracle 数据库、Excel 表格等,方便数据...

    提高ORACLE数据库的查询统计速度

    2. **性能瓶颈**:在执行查询统计过程中可能出现的延迟或响应时间较长的问题。 3. **优化目标**:通过调整数据库配置、改进查询逻辑等方式来提高查询效率和响应速度。 #### 二、Oracle数据库查询统计速度的影响因素...

    基于oracle数据库的计算机财务管理系统的设计与实现

    例如,为频繁查询的字段创建唯一索引或复合索引,以减少数据查找的时间。 四、SQL语句与存储过程 在财务管理系统中,SQL用于数据的增删改查操作。此外,存储过程和函数可以封装复杂的业务逻辑,提高执行效率,减少...

    Oracle 11g

    7. **网格计算**:Oracle Grid Infrastructure支持网格计算,允许多台服务器共享资源,形成一个计算网格,提供高可用性和可扩展性。 8. **企业级XML处理**:Oracle 11g提供了强大的XML DB组件,支持XML数据的存储、...

    Oracle8i概述

    这种优化对于大型数据库系统尤为重要,因为它直接影响到系统的响应时间和整体性能。 综上所述,Oracle8i是一款功能强大的数据库管理系统,它不仅具备传统的数据库管理功能,还在Web应用集成、Java支持、高性能OLTP...

    Oracle Spatial9i介绍

    除了基本的数据存储之外,Oracle Spatial还提供了丰富的函数和操作符,可以用于执行空间数据之间的各种运算,如距离计算、空间关系判断等。这些操作使得开发者可以在SQL语句中直接处理空间数据,而无需编写额外的...

    oracle+plsql性能优化

    这些工具能够提供SQL语句执行的详细信息,帮助分析查询效率和数据库的响应时间。 通过上述的优化方法和技巧,可以有效地提高Oracle数据库的性能,减少数据查询和处理的时间,从而提升整个系统的响应速度和稳定性。...

    Oracle精髓(第4版).pdf

    Oracle提供了多种性能优化工具和技术,如索引、分区、并行处理等,可以帮助数据库管理员提高查询效率,减少响应时间。索引是一种数据结构,用于快速定位数据,减少全表扫描的时间。分区则将大表分解为多个较小的部分...

    信永国际Oracle教程.doc .doc

    - **并购时间线**: - 2008年初,SUN以10亿美元的价格收购了MySQL。 - 2009年4月,Oracle以74亿美元的价格收购了SUN。 - **战略意义**: - **云计算核心地位**:随着云计算的重要性日益增加,数据成为了云计算的...

    oracle学习资料大全PDF

    最后,"物化视图.pdf"专注于Oracle的物化视图,这是一种预计算的查询结果,用于提高复杂查询的响应时间,特别是在数据仓库环境中。 这个PDF合集覆盖了Oracle的各个方面,从基础操作到高级主题,是学习和掌握Oracle...

    提高ORACLE8i数据库响应速度的若干技术对策.pdf

    【提高ORACLE8i数据库响应速度的技术对策】 在数据库应用系统中,ORACLE8i数据库的响应速度至关重要,尤其在大数据表的存取问题上。随着业务数据存储量的增加,系统的响应速度会逐渐变慢,这在B/S模式下尤为明显。...

    Oracle_数据库中的海量数据处理

    3. **物化视图(Materialized Views)**:预先计算好复杂查询的结果并将其存储为物理表,从而大幅减少实际查询时的计算量。 4. **直接加载API(Direct Loader API)**:提供高速数据加载接口,显著提高批量数据导入...

    Oracle ERP 产品简介

    Oracle ERP的资产管理系统帮助企业跟踪和管理固定资产,包括维护计划、折旧计算、资产报废等。通过有效的资产生命周期管理,企业可以降低维护成本,延长资产使用寿命,提高投资回报率。 六、集成与协同 Oracle ERP...

    oracle spatial的官方指南

    - 随着时间的发展,Oracle Spatial已经经历了多个版本的迭代,每个版本都增加了新的特性和改进了现有功能。 - 对于不同版本之间的兼容性问题,用户需要参考官方文档或迁移指南来进行适当的调整。 ### 六、Oracle ...

    ORACLE查询优化

    Oracle数据库,作为全球广泛使用的数据库管理系统之一,其优化策略和技术对于提升业务系统的响应速度和资源利用效率具有深远影响。以下是对“ORACLE查询优化”这一主题的详细解析。 一、SQL优化基础 1. **索引优化*...

    Oracle数据库在网格计算中的应用

    Oracle9i数据库采用"Shared Everything"的并行处理架构,能够充分利用所有硬件资源,包括处理器、内存和I/O带宽,确保高效的数据处理和响应时间。此外,Oracle数据库的平台无关性也是一个关键特性,统一的代码库使得...

    oracle sql_tuning

    SQL_Tuning是Oracle官方提供的一个专题,旨在帮助管理员和开发人员优化SQL查询,从而提高数据库的效率和响应时间。以下是一些关于"Oracle SQL Tuning"的重要知识点: 1. **SQL执行计划**:SQL执行计划是Oracle解析...

    oracle数据仓库解决方案

    3. **高效的性能**:即使处理大量数据也能保持快速响应时间。 4. **灵活的分析工具**:支持复杂的查询和多维度分析。 5. **易于使用的界面**:简化用户操作,提高用户体验。 ##### 1.4 Oracle数据仓库:被证明是有...

Global site tag (gtag.js) - Google Analytics