oracle时间函数

在oracle中处理日期大全    
   
      TO_DATE格式      
  Day:      
  dd   number   12      
  dy   abbreviated   fri      
  day   spelled   out   friday      
  ddspth   spelled   out,   ordinal   twelfth      
  Month:      
  mm   number   03      
  mon   abbreviated   mar      
  month   spelled   out   march      
  Year:      
  yy   two   digits   98      
  yyyy   four   digits   1998      
   
  24小时格式下时间范围为:   0:00:00   -   23:59:59....      
  12小时格式下时间范围为:   1:00:00   -   12:59:59   ....      
  1.      
  日期和字符转换函数用法(to_date,to_char)      
   
  2.      
  select   to_char(   to_date(222,'J'),'Jsp')   from   dual      
   
  显示Two   Hundred   Twenty-Two      
   
  3.      
  求某天是星期几      
  select   to_char(to_date('2002-08-26','yyyy-mm-dd'),'day')   from   dual;      
  星期一      
  select   to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE   =   American')   from   dual;      
  monday      
  设置日期语言      
  ALTER   SESSION   SET   NLS_DATE_LANGUAGE='AMERICAN';      
  也可以这样      
  TO_DATE   ('2002-08-26',   'YYYY-mm-dd',   'NLS_DATE_LANGUAGE   =   American')      
   
  4.      
  两个日期间的天数      
  select   floor(sysdate   -   to_date('20020405','yyyymmdd'))   from   dual;      
   
  5.   时间为null的用法      
  select   id,   active_date   from   table1      
  UNION      
  select   1,   TO_DATE(null)   from   dual;      
   
  注意要用TO_DATE(null)      
   
  6.      
  a_date   between   to_date('20011201','yyyymmdd')   and   to_date('20011231','yyyymmdd')      
  那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。      
  所以,当时间需要精确的时候,觉得to_char还是必要的      
  7.   日期格式冲突问题      
  输入的格式要看你安装的ORACLE字符集的类型,   比如:   US7ASCII,   date格式的类型就是:   '01-Jan-01'      
  alter   system   set   NLS_DATE_LANGUAGE   =   American      
  alter   session   set   NLS_DATE_LANGUAGE   =   American      
  或者在to_date中写      
  select   to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE   =   American')   from   dual;      
  注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,      
  可查看      
  select   *   from   nls_session_parameters      
  select   *   from   V$NLS_PARAMETERS      
   
  8.      
  select   count(*)      
  from   (   select   rownum-1   rnum      
  from   all_objects      
  where   rownum   <=   to_date('2002-02-28','yyyy-mm-dd')   -   to_date('2002-      
  02-01','yyyy-mm-dd')+1      
  )      
  where   to_char(   to_date('2002-02-01','yyyy-mm-dd')+rnum-1,   'D'   )      
  not      
  in   (   '1',   '7'   )      
   
  查找2002-02-28至2002-02-01间除星期一和七的天数      
  在前后分别调用DBMS_UTILITY.GET_TIME,   让后将结果相减(得到的是1/100秒,   而不是毫秒).      
   
  9.      
  select   months_between(to_date('01-31-1999','MM-DD-YYYY'),      
  to_date('12-31-1998','MM-DD-YYYY'))   "MONTHS"   FROM   DUAL;      
  1      
   
  select   months_between(to_date('02-01-1999','MM-DD-YYYY'),      
  to_date('12-31-1998','MM-DD-YYYY'))   "MONTHS"   FROM   DUAL;      
   
  1.03225806451613      
  10.   Next_day的用法      
  Next_day(date,   day)      
   
  Monday-Sunday,   for   format   code   DAY      
  Mon-Sun,   for   format   code   DY      
  1-7,   for   format   code   D      
   
  11      
  select   to_char(sysdate,'hh:mi:ss')   TIME   from   all_objects      
  注意:第一条记录的TIME   与最后一行是一样的      
  可以建立一个函数来处理这个问题      
  create   or   replace   function   sys_date   return   date   is      
  begin      
  return   sysdate;      
  end;      
   
  select   to_char(sys_date,'hh:mi:ss')   from   all_objects;      
  12.      
  获得小时数      
   
  SELECT   EXTRACT(HOUR   FROM   TIMESTAMP   '2001-02-16   2:38:40')   from   offer      
  SQL>   select   sysdate   ,to_char(sysdate,'hh')   from   dual;      
   
  SYSDATE   TO_CHAR(SYSDATE,'HH')      
  --------------------   ---------------------      
  2003-10-13   19:35:21   07      
   
  SQL>   select   sysdate   ,to_char(sysdate,'hh24')   from   dual;      
   
  SYSDATE   TO_CHAR(SYSDATE,'HH24')      
  --------------------   -----------------------      
  2003-10-13   19:35:21   19      
   
  获取年月日与此类似      
  13.      
  年月日的处理      
  select   older_date,      
  newer_date,      
  years,      
  months,      
  abs(      
  trunc(      
  newer_date-      
  add_months(   older_date,years*12+months   )      
  )      
  )   days      
  from   (   select      
  trunc(months_between(   newer_date,   older_date   )/12)   YEARS,      
  mod(trunc(months_between(   newer_date,   older_date   )),      
  12   )   MONTHS,      
  newer_date,      
  older_date      
  from   (   select   hiredate   older_date,      
  add_months(hiredate,rownum)+rownum   newer_date      
  from   emp   )      
  )      
   
  14.      
  处理月份天数不定的办法      
  select   to_char(add_months(last_day(sysdate)   +1,   -2),   'yyyymmdd'),last_day(sysdate)   from   dual      
   
  16.      
  找出今年的天数      
  select   add_months(trunc(sysdate,'year'),   12)   -   trunc(sysdate,'year')   from   dual      
   
  闰年的处理方法      
  to_char(   last_day(   to_date('02'   ||   :year,'mmyyyy')   ),   'dd'   )      
  如果是28就不是闰年      
   
  17.      
  yyyy与rrrr的区别      
  'YYYY99   TO_C      
  -------   ----      
  yyyy   99   0099      
  rrrr   99   1999      
  yyyy   01   0001      
  rrrr   01   2001      
   
  18.不同时区的处理      
  select   to_char(   NEW_TIME(   sysdate,   'GMT','EST'),   'dd/mm/yyyy   hh:mi:ss')   ,sysdate      
  from   dual;      
   
  19.      
  5秒钟一个间隔      
  Select   TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300)   *   300,'SSSSS')   ,TO_CHAR(sysdate,'SSSSS')      
  from   dual      
   
  2002-11-1   9:55:00   35786      
  SSSSS表示5位秒数      
   
  20.      
  一年的第几天      
  select   TO_CHAR(SYSDATE,'DDD'),sysdate   from   dual      
  310   2002-11-6   10:03:51      
   
  21.计算小时,分,秒,毫秒      
  select      
  Days,      
  A,      
  TRUNC(A*24)   Hours,      
  TRUNC(A*24*60   -   60*TRUNC(A*24))   Minutes,      
  TRUNC(A*24*60*60   -   60*TRUNC(A*24*60))   Seconds,      
  TRUNC(A*24*60*60*100   -   100*TRUNC(A*24*60*60))   mSeconds      
  from      
  (      
  select      
  trunc(sysdate)   Days,      
  sysdate   -   trunc(sysdate)   A      
  from   dual      
  )      
   
   
   
  select   *   from   tabname      
  order   by   decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');      
   
  //      
  floor((date2-date1)   /365)   作为年      
  floor((date2-date1,   365)   /30)   作为月      
  mod(mod(date2-date1,   365),   30)作为日.      
  23.next_day函数      
  next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。      
  1   2   3   4   5   6   7      
  日   一   二   三   四   五   六   
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值