`
lizhiyu211
  • 浏览: 225579 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
  1. trunc()函数;
  2. round()函数;
  3. EXTRACT()函数;
  4. to_char()函数;
  5. interval 间隔计算;

 

-- 获取时间

 

 

select sysdate "sysdate" from dual;
sysdate
-------------------------
2013/8/5 10:20:14

 

 

 

-- 日期精确到 年 月 日 时 分 秒 季度 世纪

-- trunc() & round() 这两个函数经常被使用在数值处理中,日期类型中同样适用。

TRUNC(date [, fmt ])
ROUND(date [, fmt ])

fmt列表如下:

 

Table 5-14 lists the format models you can use with the ROUND and TRUNC date functions and the units to which they round and truncate dates. The default model, 'DD', returns the date rounded or truncated to the day with a time of midnight.

Table 5-14 Date Format Models for the ROUND and TRUNC Date Functions

Format Model Rounding or Truncating Unit
CC
SCC

One greater than the first two digits of a four-digit year

SYYYY
YYYY
YEAR
SYEAR
YYY
YY
Y

Year (rounds up on July 1)

IYYY
IY
IY
I

ISO Year

Q

Quarter (rounds up on the sixteenth day of the second month of the quarter)

MONTH
MON
MM
RM

Month (rounds up on the sixteenth day)

WW

Same day of the week as the first day of the year

IW

Same day of the week as the first day of the ISO year

W

Same day of the week as the first day of the month

DDD
DD
J

Day

DAY
DY
D

Starting day of the week

HH
HH12
HH24

Hour

MI

Minute

 

 

--************************************************************************************************************

-- 提取当前日期中的 年 月 日 时 分 秒 当前年中第几周 当前日期是周几 等 可使用 to_char()  和 EXTRACT()

语法:

EXTRACT( { { YEAR
           | MONTH
           | DAY
           | HOUR
           | MINUTE
           | SECOND
           }
         | { TIMEZONE_HOUR
           | TIMEZONE_MINUTE
           }
         | { TIMEZONE_REGION
           | TIMEZONE_ABBR
           }
         }
         FROM { datetime_value_expression
              | interval_value_expression
              }
       )

例句:

The following example returns from the oe.orders table the number of orders placed in each month:

SELECT EXTRACT(month FROM order_date) "Month",
  COUNT(order_date) "No. of Orders"
  FROM orders
  GROUP BY EXTRACT(month FROM order_date)
  ORDER BY "No. of Orders" DESC;

     Month No. of Orders
---------- -------------
        11            15
         7            14
         6            14
         3            11
         5            10
         9             9
         2             9
         8             7
        10             6
         1             5
        12             4
         4             1
 
12 rows selected.

The following example returns the year 1998.

SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL;

EXTRACT(YEARFROMDATE'1998-03-07')
---------------------------------
                             1998

The following example selects from the sample table hr.employees all employees who were hired after 1998:

SELECT last_name, employee_id, hire_date
   FROM employees
   WHERE EXTRACT(YEAR FROM
   TO_DATE(hire_date, 'DD-MON-RR')) > 1998
   ORDER BY hire_date;


LAST_NAME                 EMPLOYEE_ID HIRE_DATE
------------------------- ----------- ---------
Landry                            127 14-JAN-99
Lorentz                           107 07-FEB-99
Cabrio                            187 07-FEB-99
. . .

The following example results in ambiguity, so Oracle returns UNKNOWN:

SELECT EXTRACT(TIMEZONE_REGION 
      FROM TIMESTAMP '1999-01-01 10:00:00 -08:00')
   FROM DUAL;

EXTRACT(TIMEZONE_REGIONFROMTIMESTAMP'1999-01-0110:00:00-08:00')
----------------------------------------------------------------
UNKNOWN

 

-- to_char() 函数处理日期 

语法:

TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])

interval这种参数不常使用这里就不做讨论了,如有需要可以参见官方文档的例子。

 

SQL> select to_char(sysdate,'yyyy-mm-dd:hh24:mi:ss:pm:dy') from dual; 
TO_CHAR(SYSDATE,'YYYY-MM-DD:HH
---------------------------------------
2013-08-05:11:05:38:上午:星期一

 

 

下面是一些常用的例子:

fmt = 'yyyy' -- 显示datetime的当前年 4位字符
fmt = 'yyy'  -- 显示datetime的当前年 后三位字符
fmt = 'yy'   -- 显示datetime的当前年 后两位字符
fmt = 'y'    -- 显示datetime的当前年 最后一位字符
fmt = 'Q'    -- 显示datetiem所在季度
fmt = 'mm'   -- 显示datetime的当前月份
fmt = 'IW'   -- 显示datetime的周 (按日历上的那种每年有52或53周 例如20130107为日历上2013年的第二周)
fmt = 'WW'   -- 显示datetime为本年中第几个星期/七天(本年1月1号至1月7号为本年第一个星期 非日历上的正常周)
fmt = 'W'    -- 显示datetime为本月中第几个星期/七天(1号到7号为第一个星期 或者说是第一个七天)
fmt = 'ddd'  -- 显示datetime的当前日期在本年中的第几天
fmt = 'dd'   -- 显示datetime的当前日期中的天
fmt = 'd'    -- 显示datetime是当前周的第几天 (周日为第一天)
fmt = 'hh'   -- 显示datetime小时 12小时制
fmt = 'hh24' -- 显示datetime小时 24小时制 
fmt = 'mi'   -- 显示datetime分钟
fmt = 'ss'   -- 显示datetime秒

 

IW与WW 区别 可见             http://www.360doc.com/content/13/0805/11/764260_304857194.shtml

 

例句

select to_char(sysdate,'yyyy') from dual;
TO_CHAR(SYSDATE,'YYYY')
-----------------------
2013

   

SQL> select to_char(sysdate,'yy') from dual;
TO_CHAR(SYSDATE,'YY')
---------------------
13

   

----***********************************************************************************

-- 时间间隔计算

  
   
-- 当前时间减去5年的时间
   select   sysdate,sysdate - interval '5' year  from dual;
  当前时间减去5月的时间
   select   sysdate,sysdate - interval '5' month  from dual;
  当前时间减去5天的时间
   select   sysdate - interval '5' day  from dual;
-- 当前时间减去5小时的时间
   select   sysdate - interval '5' hour  from dual;
-- 当前时间减去5分钟的时间
   select   sysdate,sysdate - interval '5' MINUTE  from  dual;
-- 当前时间减去5秒时间
    select   sysdate,sysdate - interval '5' second  from dual;
-- 时间间隔乘以一个数字
   select   sysdate,sysdate - 4*interval '5' MINUTE  from dual

 -- 计算某月最后一天
 
-- 计算某月最后一天
select last_day(sysdate) from dual;
LAST_DAY(SYSDATE)
-----------------
2013/8/31 11:51:5
 
 
待续...... 欢迎补充

 

0
1
分享到:
评论

相关推荐

    oracle管理及优化文档 粗略整理

    自己常用的oracle 管理 优化 /** 优化 1。尽量少用in 2。尽量用not exists 或者外连接替代 not in 操作符。因为not in不能 应用表的索引 3。尽量不用<> 或者!= 操作符。不等于操作符是永远不会用到索引的,...

    trunc函数应用实例

    日前系统中有个业务处理,需要定时每小时执行一次预定义事务,开始时定义下一个执行时间为 sysdate +1/24,后来发现下一次的执行时间,oracle是在事务执行完成之后才进行计算的.本来我设想是在每个整点执行过程,结果...

    2020年法定节假日Oracle处理.rar

    资源主体是自己写的一个Oracle函数,用于处理2020年去除法定节假日之后的任意两个时间点之间所经历的工作日时长(小时)。2020年的法定节假日数据已经整理打包在资源里,开箱即用。可实际应用于生产环境。

    ORACLE之常用FAQ V1.0(整理)

    [Q]怎么样快速计算事务的时间与日志量 5 [Q]怎样创建临时表 6 [Q]怎么样在PL/SQL中执行DDL语句 6 [Q]怎么样获取IP地址 7 [Q]怎么样加密存储过程 7 [Q] 7 [Q] 7 [Q]如果存在就更新,不存在就插入可以用一个语句实现吗...

    Oracle知识整理笔记

    小编整理的一篇关于Oracle知识的学习笔记,希望对大家有帮助。 1.简单对比一下SQL Server 和Oracle  先给大家看一张我画得图:  安装完Sql Server后,我们打开、连接数据库引擎后可以看到很多的数据库有系统...

    Oracle9i的init.ora参数中文说明

    有关所有区域的信息, 请参阅 Oracle8i National Language Support Guide。 值范围: 任何有效的地区名。 默认值: 根据操作系统而定 nls_timestamp_format: 说明: 与 NLS_TIME_FORMAT 相似, 只不过它设置的是 ...

    Java学习笔记-个人整理的

    {10.2}其他Java相关}{146}{section.10.2} {11}项目}{148}{chapter.11} {11.1}ELTS}{148}{section.11.1} {12}Oracle数据库}{151}{chapter.12} {12.1}术语}{151}{section.12.1} {12.2}登录数据库}{151}{section....

    SQL性能优化

     以上四个SQL在ORACLE分析整理之后产生的结果及执行的时间是一样的,但是从ORACLE共享内存SGA的原理,可以得出ORACLE对每个SQL 都会对其进行一次分析,并且占用共享内存,如果将SQL的字符串及格式写得完全相同则...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例202 计算程序运行时间 257 实例203 从控制台输入密码 258 9.4 Math类的使用 259 实例204 角度和弧度的转换 259 实例205 三角函数的使用 260 实例206 反三角函数的使用 261 实例207 双曲函数的使用 262 实例208 ...

    Toad 使用快速入门

    在Oracle应用程序的开发过程中,访问数据库对象和编写SQL程序是一件乏味且耗费时间的工作,对数据库进行日常管理也是需要很多SQL脚本才能完成的。Quest Software为此提供了高效的Oracle应用开发工具-Toad(Tools of ...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例247 查询指定时间段的数据 实例248 按月查询数据 9.5 大小比较、逻辑查询、重复记录查询 实例249 查询数据大于指定条件的数据 实例250 NOT与谓词进行组合条件的查询 实例251 查询时不显示重复记录 9.6 ...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例247 查询指定时间段的数据 实例248 按月查询数据 9.5 大小比较、逻辑查询、重复记录查询 实例249 查询数据大于指定条件的数据 实例250 NOT与谓词进行组合条件的查询 实例251 查询时不显示重复记录 9.6 ...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例247 查询指定时间段的数据   cc实例248 按月查询数据   9.5 大小比较.c逻辑查询.c重复记录查询   cc实例249 查询数据大于指定条件的数据   cc实例250 NOT与谓词进行组合条件的查询   cc实例...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例247 查询指定时间段的数据   cc实例248 按月查询数据   9.5 大小比较.c逻辑查询.c重复记录查询   cc实例249 查询数据大于指定条件的数据   cc实例250 NOT与谓词进行组合条件的查询   cc实例...

Global site tag (gtag.js) - Google Analytics