`
dyccsxg
  • 浏览: 205225 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类

Oracle 中与时间有关的计算

阅读更多
# sysdate+1/24        - 加1小时
# sysdate+1/24/60     - 加1分钟
# sysdate+1/24/60/60  - 加1秒钟
# 
SQL> alter session set nls_date_format='yyyy-MM-dd hh24:mi:ss';

Session altered.

SQL> select sysdate, sysdate+1/24, sysdate+1/24/60, sysdate+1/24/60/60 from dual;

SYSDATE             SYSDATE+1/24        SYSDATE+1/24/60     SYSDATE+1/24/60/60
------------------- ------------------- ------------------- -------------------
2013-09-18 09:40:43 2013-09-18 10:40:43 2013-09-18 09:41:43 2013-09-18 09:40:44

SQL> -- 获取本周第一天
SQL> select trunc(sysdate, 'day') from dual;

TRUNC(SYSDATE,'DAY'                                                             
-------------------                                                             
2013-10-13 00:00:00                                                             

SQL> -- 获取本周最后一天
SQL> select trunc(sysdate, 'day') + 7 - 1/24/60/60 from dual;

TRUNC(SYSDATE,'DAY'                                                             
-------------------                                                             
2013-10-19 23:59:59                                                             

SQL> -- 获取下周第 n 天
SQL> select trunc(next_day(sysdate, 1)), trunc(next_day(sysdate, 7)) from dual;

TRUNC(NEXT_DAY(SYSD TRUNC(NEXT_DAY(SYSD                                         
------------------- -------------------                                         
2013-10-20 00:00:00 2013-10-26 00:00:00                                         

SQL> --
SQL> -- 获取上月第一天
SQL> select trunc(add_months(sysdate, -1), 'month') from dual;

TRUNC(ADD_MONTHS(SY                                                             
-------------------                                                             
2013-09-01 00:00:00                                                             

SQL> select to_date(to_char(add_months(sysdate, -1), 'yyyy-MM'), 'yyyy-MM') from dual;

TO_DATE(TO_CHAR(ADD                                                             
-------------------                                                             
2013-09-01 00:00:00                                                             

SQL> -- 获取本月第一天
SQL> select trunc(sysdate, 'month') from dual;

TRUNC(SYSDATE,'MONT                                                             
-------------------                                                             
2013-10-01 00:00:00                                                             

SQL> select to_date(to_char(sysdate, 'yyyy-MM'), 'yyyy-MM') from dual;

TO_DATE(TO_CHAR(SYS                                                             
-------------------                                                             
2013-10-01 00:00:00                                                             

SQL> -- 获取本月最后一天
SQL> select trunc(last_day(sysdate)) + 1 - 1/24/60/60 from dual;

TRUNC(LAST_DAY(SYSD                                                             
-------------------                                                             
2013-10-31 23:59:59                                                             

SQL> select add_months(trunc(sysdate, 'month'), 1) - 1/24/60/60 from dual;

ADD_MONTHS(TRUNC(SY                                                             
-------------------                                                             
2013-10-31 23:59:59                                                             

SQL> --
SQL> -- 获取本季度第一天
SQL> select trunc(sysdate, 'Q') from dual;

TRUNC(SYSDATE,'Q')                                                              
-------------------                                                             
2013-10-01 00:00:00                                                             

SQL> -- 获取本季度最后一天
SQL> select add_months(trunc(sysdate, 'Q'), 3) - 1/24/60/60 from dual;

ADD_MONTHS(TRUNC(SY                                                             
-------------------                                                             
2013-12-31 23:59:59                                                             

SQL> --
SQL> -- 获取去年第一天(因为闰年平年天数不一样,所以不能使用加减 366或365天 来计算年份)
SQL> select trunc(trunc(sysdate, 'year') - 1, 'year') from dual;

TRUNC(TRUNC(SYSDATE                                                             
-------------------                                                             
2012-01-01 00:00:00                                                             

SQL> -- 获取今年第一天
SQL> select trunc(sysdate, 'year') from dual;

TRUNC(SYSDATE,'YEAR                                                             
-------------------                                                             
2013-01-01 00:00:00                                                             

SQL> select to_date(to_char(sysdate, 'yyyy')||'-01-01', 'yyyy-MM-dd') from dual;

TO_DATE(TO_CHAR(SYS                                                             
-------------------                                                             
2013-01-01 00:00:00                                                             

SQL> -- 获取今年最后一天
SQL> select trunc(add_months(sysdate, 12), 'year') - 1/24/60/60 from dual;

TRUNC(ADD_MONTHS(SY                                                             
-------------------                                                             
2013-12-31 23:59:59                                                             

SQL> select to_date(to_char(sysdate, 'yyyy')||'-12-31 23:59:59', 'yyyy-MM-dd hh24:mi:ss') from dual;

TO_DATE(TO_CHAR(SYS                                                             
-------------------                                                             
2013-12-31 23:59:59                                                             

SQL> 
SQL> -- 计算相差的天数
SQL> select round(to_number(to_date('2013-10-19 23:59:59', 'yyyy-MM-dd hh24:mi:ss') - to_date('2013-10-18 00:00:00', 'yyyy-MM-dd hh24:mi:ss'))) value from dual;

     VALUE                                                                      
----------                                                                      
         2                                                                      

SQL> -- 计算相差的小时数
SQL> select round(to_number(to_date('2013-10-19 12:00:00', 'yyyy-MM-dd hh24:mi:ss') - to_date('2013-10-19 11:00:00', 'yyyy-MM-dd hh24:mi:ss')) * 24) value from dual;

     VALUE                                                                      
----------                                                                      
         1                                                                      

SQL> -- 计算相差的分钟数
SQL> select round(to_number(to_date('2013-10-19 12:00:00', 'yyyy-MM-dd hh24:mi:ss') - to_date('2013-10-19 11:30:00', 'yyyy-MM-dd hh24:mi:ss')) * 24 * 60) value from dual;

     VALUE                                                                      
----------                                                                      
        30                                                                      

SQL> 

分享到:
评论

相关推荐

    使用oracle计算系统当前时间的毫秒数

    对于Oracle数据库用户而言,有时需要获取当前时间的毫秒数来进行各种时间相关的计算或对比操作。本文将详细介绍如何在Oracle数据库环境中计算系统当前时间的毫秒数。 #### Oracle计算当前时间的毫秒数的方法 在...

    Oracle计算连续天数,计算连续时间,Oracle连续天数统计

    在Oracle数据库中,计算连续天数或连续时间是一项常见的需求,尤其在数据分析、报表生成或者业务规则检查等场景。这个任务通常涉及到日期处理和逻辑判断,Oracle提供了丰富的日期函数和运算符来支持这类操作。本篇...

    在Oracle9i中Oracle DATA计算时间差

    本文介绍了在Oracle9i中Oracle DATA计算时间差的方法。

    oracle 时间格式转化以及计算.pdf

    在Oracle数据库中进行时间格式转换以及时间计算是十分常见的操作,它们在数据处理和报表生成中尤为重要。以下详细解释了Oracle中时间格式转换以及计算的知识点。 首先,Oracle提供了多种函数来对日期时间进行格式...

    Oracle数据库的周数计算

    在Oracle数据库中,对日期进行周数计算是一项非常实用的功能,尤其是在处理涉及时间序列的数据分析任务时。本文将详细介绍两种常用的周数计算方法:“ww”格式和“IW”格式,并提供具体的实现步骤与示例。 #### 一...

    oracle时间和秒之间相互转换

    在Oracle数据库中,进行时间和秒之间的转换是一种常见的需求,特别是在处理与特定时间点(例如1970-01-01)相关的日期和时间数据时。本文将详细介绍如何在Oracle中实现当前时间与毫秒之间的转换,并提供具体的示例...

    Oracle里面 SQL语句 怎么得到两个时间的时间差

    在Oracle数据库中,计算两个日期之间的时间差是一个常见的需求,特别是在处理与时间相关的业务逻辑时。根据提供的信息,本文将详细介绍如何使用SQL语句来获取两个时间(`START_DATE`和`END_DATE`)之间的差值,并...

    Oracle 计算非工作时间.sql

    Oracle 计算非工作时间(去除周末,自定义节假日,等待时间)

    Oracle时间区间段合并.pdf

    本问题涉及的PDF文档“Oracle时间区间段合并.pdf”似乎提供了关于如何使用SQL来实现这一功能的方法。以下是对这个算法的详细解释: 首先,我们需要理解数据结构。在这个例子中,我们有一个名为`TAB_0`的表,包含`...

    ORACLE 日期和时间处理汇总

    Oracle 日期和时间处理是数据库管理系统中非常重要的一部分,本文汇总了 oracle 中日期和时间处理的各种函数和使用方法,并提供了实例供参考。 一、日期和字符转换函数 Oracle 中日期和字符转换函数主要有两个:...

    使用Oracle中的时间间隔型数据

    在Oracle 9i之前,处理时间间隔通常需要依赖于DATE类型,并将时间间隔转换为秒数存储在NUMBER列中,这在进行时间计算时会变得复杂,因为涉及到分钟、小时和天数的换算。Oracle 9i开始遵循SQL 99标准,引入了两种时间...

    oracle中TIMESTAMP与DATE比较

    在Oracle数据库中,`TIMESTAMP`与`DATE`两种数据类型是用于存储日期和时间信息的关键组成部分,但它们之间存在显著的区别,特别是在处理时间和精度方面。本文将深入探讨这两种数据类型的特点,以及如何在实际应用中...

    Oracle数据库处理时间的技巧

    在 SQL 和 PL/SQL 中,可以使用时间间隔型数据来进行时间计算,例如使用 INTERVAL YEAR(year_precision) TO MONTH 和 INTERVAL DAY(day_precision) TO SECOND 来定义时间间隔。同时,转换函数 to_date() 和 to_char...

    oracle时间差表达式

    ### Oracle时间差表达式详解 在Oracle数据库中,计算两个日期之间的时间差是一个常见的需求,尤其是在处理业务逻辑或数据报告时。本篇文章将详细介绍如何利用Oracle内置函数来精确计算两个日期之间的差值,并且能够...

    oracle sql计算一段时间内(除去周六日)的秒数

    利用 oracle sql 实现 计算一段时间内(除去周六日)的秒数

    Oracle时间日期操作

    Oracle 时间日期操作是 Oracle 数据库中常用的操作,包括对日期和时间的各种计算和处理。下面是 Oracle 时间日期操作的相关知识点: 1. 日期和时间的基本操作 Oracle 中的日期和时间可以使用 sysdate 函数来获取...

    oracle时间函数处理总结大全

    ### Oracle时间函数处理总结大全 Oracle数据库提供了丰富的内置函数来处理日期和时间数据。这些函数在日常开发工作中非常实用,可以高效地完成日期格式转换、日期计算等操作。本文将根据给定的内容对Oracle中常用的...

    Oracle日期时间(DateTime)操作

    本文将深入解析Oracle日期时间操作的一些核心知识点,涵盖基本的日期时间函数使用、日期时间的格式化、以及一些高级的日期时间计算技巧。 ### 一、基础日期时间函数 #### 1. SYSDATE `SYSDATE`是Oracle系统中获取...

Global site tag (gtag.js) - Google Analytics