oracle关于日期时间的
 
select   to_date(fld1,'yyyy-mm-dd   hi24:mi:ss')   -   to_date(fld1,'yyyy-mm-dd   hi24:mi:ss')   DIFF_TIME   from   dual;  
  現在得到的DIFF_TIME   是一個數字  
  如果想知道差多少小時:select   to_date(fld1,'yyyy-mm-dd   hi24:mi:ss')   -   to_date(fld1,'yyyy-mm-dd   hi24:mi:ss')*24   DIFF_TIME   from   dual;  
  如果想知道差多少小分鐘:select   to_date(fld1,'yyyy-mm-dd   hi24:mi:ss')   -   to_date(fld1,'yyyy-mm-dd   hi24:mi:ss')*24*60   DIFF_TIME   from   dual;  
  如果想知道差多少小秒鐘:select   to_date(fld1,'yyyy-mm-dd   hi24:mi:ss')   -   to_date(fld1,'yyyy-mm-dd   hi24:mi:ss')*24*60*60   DIFF_TIME   from   dual;  
   
  在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      
  日   一   二   三   四   五   六  
 
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中几个关于日期方面的SQL实例
 
№1:取得当前日期是本月的第几周
 
SQL>   select   to_char(sysdate,'YYYYMMDD   W   HH24:MI:SS')   from   dual;  
   
  TO_CHAR(SYSDATE,'YY  
  -------------------  
  20030327   4   18:16:09  
   
  SQL>   select   to_char(sysdate,'W')   from   dual;  
   
  T  
  -  
  4 
 
№2:取得当前日期是一个星期中的第几天,注意星期日是第一天
 
  SQL>   select   sysdate,to_char(sysdate,'D')   from   dual;  
   
  SYSDATE       T  
  ---------   -  
  27-MAR-03   5   DL.bitsCN.com网管软件下载
类似:
select   to_char(sysdate,'yyyy')   from   dual;   --年  
  select   to_char(sysdate,'Q'   from   dual;           --季  
  select   to_char(sysdate,'mm')   from   dual;       --月  
  select   to_char(sysdate,'dd')   from   dual;       --日  
  ddd   年中的第几天  
  WW   年中的第几个星期  
  W   该月中第几个星期  
  D   周中的星期几  
  hh   小时(12)  
  hh24   小时(24)  
  Mi   分  
  ss   秒
 
№3:取当前日期是星期几中文显示:
 
SQL>   select   to_char(sysdate,'day')   from   dual;  
   
  TO_CHAR(SYSDATE,'DAY')  
  ----------------------  
  星期四  
№4:如果一个表在一个date类型的字段上面建立了索引,如何使用
 
alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'

№5: 得到当前的日期
select sysdate from dual;
 
№6: 得到当天凌晨0点0分0秒的日期
select trunc(sysdate) from dual;
 
-- 得到这天的最后一秒
select trunc(sysdate) + 0.99999 from dual;
 
-- 得到小时的具体数值
select trunc(sysdate) + 1/24 from dual;
select trunc(sysdate) + 7/24 from dual; bitsCN.nET中国网管博客
№7:得到明天凌晨0点0分0秒的日期
 
select trunc(sysdate+1) from dual;
 
select trunc(sysdate)+1 from dual;

№8: 本月一日的日期
select trunc(sysdate,'mm') from dual;

№9:得到下月一日的日期
select trunc(add_months(sysdate,1),'mm') from dual;
 
№10:返回当前月的最后一天?
select last_day(sysdate)  from dual;       
select last_day(trunc(sysdate))  from dual; 
select trunc(last_day(sysdate))  from dual;
select trunc(add_months(sysdate,1),'mm') - 1 from dual;

№11: 得到一年的每一天
select trunc(sysdate,'yyyy')+ rn -1 date0
from
(select rownum rn from all_objects
where rownum<366);

№12:今天是今年的第N天
SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;
№13:如何在给现有的日期加上2年
select add_months(sysdate,24) from dual;
№14:判断某一日子所在年分是否为润年
select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual;
 
№15:判断两年后是否为润年
select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','闰年','平年') from dual; DL.bitsCN.com网管软件下载

№16:得到日期的季度
 
select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;
 
select to_char(sysdate, 'Q') from dual;
 

0

收藏

gghhgame

37篇文章,18W+人气,0粉丝

Ctrl+Enter 发布

发布

取消

oracle关于日期时间的查询
oracle关于日期时间的查询

扫一扫,领取大礼包

0

分享
oracle关于日期时间的查询
gghhgame
oracle关于日期时间的查询