Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

          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(nullfrom 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-7for 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)是從當前開始下一個星期五。后面的數字是從星期日開始算起。

          posted on 2008-01-09 13:34 都市淘沙者 閱讀(261) 評論(0)  編輯  收藏 所屬分類: Oracle/Mysql/Postgres/

          主站蜘蛛池模板: 论坛| 广宗县| 巴青县| 喀喇沁旗| 格尔木市| 平顶山市| 福海县| 铜川市| 衢州市| 宝丰县| 珠海市| 肥城市| 靖安县| 榆中县| 寿光市| 绥滨县| 永春县| 沈丘县| 仁寿县| 江安县| 夏津县| 和田市| 喀喇| 昭通市| 互助| 武定县| 花垣县| 常宁市| 焉耆| 房产| 内黄县| 聂荣县| 平谷区| 万安县| 当雄县| 本溪| 班玛县| 多伦县| 凉城县| 富裕县| 扎赉特旗|