oracle關於日期時間的查詢

 
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

31篇文章,18W+人氣,0粉絲

Ctrl+Enter 發佈

發佈

取消

掃一掃,領取大禮包

0

分享
gghhgame
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章