oracle数据库日期总结

    oracle数据库对日期类型数据的操作很详细,日期类型数据表示形式涉及到系统时间时区,时间格式等。而且经常用到to_date('String','format'),to_char(Date,'format')等oracle系统函数。所以日期类型数据的操作有点复杂,操作oracle日期类型数据时注意的东西比较多。

1.sysdate表示当前日期,oracle数据库表示当前日期的对象。经常用到获取当前日期:select sysdate from dual;

2.to_date('String','format')函数表示把字符串转换为format格式的日期对象,这个函数功能很强大。String字符串可中有分隔符,分隔符可以是空格,/,\等除数字和字母以外的符号。但是日期和时间各自的分割符号要一样,两者的可以不一样。format格式可以有很多种,但是要包含Strring字符串的格式,否则to_date无法转换字符串为日期格式,因为缺少格式。

to_date格式(以时间:2007-11-02   13:45:25为例)

  Year:

  yy two digits 两位年                显示值:07

  yyy three digits 三位年                显示值:007

  yyyy four digits 四位年                显示值:2007

  Month:

  mm    number     两位月              显示值:11

  mon    abbreviated[小型的;简短的] 字符集表示          显示值:11月,若是英文版,显示nov

  month spelled out 字符集表示          显示值:11月,若是英文版,显示november

  Day:

  dd    number         当月第几天        显示值:02

  ddd    number         当年第几天        显示值:02     select to_date(sysdate,'dy') from dual   ,
select to_date('110814 08:13:43','yy-MM-dd HH:mm:ss') from dual

  dy    abbreviated 当周第几天简写    显示值:星期五,若是英文版,显示fri

  day    spelled out   当周第几天全写    显示值:星期五,若是英文版,显示friday

  ddspth spelled out, ordinal twelfth

  Hour:

  hh    two digits 12小时进制            显示值:01

  hh24 two digits 24小时进制            显示值:13

  Minute:

  mi    two digits 60进制                显示值:45

  Second:

  ss    two digits 60进制                显示值:25

  其它

  Q     digit         季度                  显示值:4

  WW    digit         当年第几周            显示值:44

  W    digit          当月第几周            显示值:1

  24小时格式下时间范围为: 0:00:00 - 23:59:59....

  12小时格式下时间范围为: 1:00:00 - 12:59:59 ....

1.获取当前日期的年,月,日,时,分,秒

      select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年

  select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月

  select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日

  select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时

  select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分

  select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒

2.求某天是星期几

     select to_char(sysdate,'dy') from dual;

     select to_char(to_date('20120323','yyyy/mm/dd'),'day') from dual

3.两个日期间的天数(oracle数据库两个日期相减获得是天数)

select floor(sysdate-to_date('20111203','yyyy-mm-dd')) from dual;

select to_char(sysdate-to_date('20111203','yyyy-mm-dd')) from dual;//返回带小数点天数

4.两个日期间的月数

select floor(months_between(sysdate,to_date('20120101','yyyy-mm-dd'))) from dual;

5.查看今年有多少天

select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

6.设置日期语言

alter session set nls_date_language='simple chinese';
alter session set nls_date_language='american';

7.next_day(date,day)的用法

date表示一个日期,day表示周日到下周六,就是1-7.

select next_day(sysdate,7) from dual;//下一个周六

select next_day(sysdate,1) from dual;//下一个周日

8.yyyy与rrrr的区别

      'YYYY99 TO_C

  ------- ----

  yyyy 99 0099

  rrrr 99 1999

  yyyy 01 0001

  rrrr 01 2001

9.不同时区的处理

  select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate

  from dual;

         AST 大西洋标准时
         ADT 大西洋夏令时
         BST 白令标准时
         BDT 白令夏令时
         CST 中央标准时
         CDT 中央夏令时
         EST 东部标准时
         EDT 东部夏令时
         GMT 格林威治平均时
         HST 阿拉斯加夏威夷标准时
         HDT 阿拉斯加夏威夷夏令时
         MST Mountain标准时
         MDT Mountain夏令时
         NST 纽芬兰标准时
         PST 太平洋标准时
         PDT 太平洋夏令时
         YST YuKon标准时
         YDT YuKon夏令时
10.5秒钟一个间隔

Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')

  from dual

11.查找月的第一天,最后一天

      SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,

  Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,

  Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,

  LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month

  FROM dual;

总结:oracle中没有timestamp类型的日期类型,只有date类型日期。2个日期类型数据相互减法以后获得天数。例如:MM和mm都表示月,而mm不像java里的分钟格式,所以oracle中代表分钟的格式是mi.

例如:

select  (to_date('2013-8-9 00:00:00','yyyy-mm-dd hh24:mi:ss')- sysdate  ) dt from dual;

sysdate:2013/8/9 13:38:21

返回-0.566388888888889,表明半天。而且是负的。表示前面的时间比后面的早。

猜你喜欢

转载自nicegege.iteye.com/blog/1462661