在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
             
            
             日期和字符轉換函數用法(to_date,to_char)
                 We overwrite NLS_DATE_FORMAT into different formats for the session. 
                 SQL> alter session set nls_date_format = 'DD-MON-RR'; Session altered.
                 SQL> set pagesize 0
               SQL> set linesize 130
               SQL> select * from nls_session_parameters;
               NLS_LANGUAGE          AMERICAN
               NLS_TERRITORY         AMERICA
               NLS_CURRENCY          $
               NLS_ISO_CURRENCY        AMERICA
               NLS_NUMERIC_CHARACTERS     .,
               NLS_CALENDAR          GREGORIAN
               NLS_DATE_FORMAT        DD-MON-RR
               NLS_DATE_LANGUAGE       AMERICAN
               NLS_SORT            BINARY
               NLS_TIME_FORMAT        HH.MI.SSXFF AM
               NLS_TIMESTAMP_FORMAT      DD-MON-RR HH.MI.SSXFF AM
               NLS_TIME_TZ_FORMAT       HH.MI.SSXFF AM TZH:TZM
               NLS_TIMESTAMP_TZ_FORMAT    DD-MON-RR HH.MI.SSXFF AM TZH:TZM
               NLS_DUAL_CURRENCY       $
               NLS_COMP            BINARY
            
               15 rows selected.
                 specify it in SQL statement:
                 
                SQL> select to_date('03-SEP-1999','DD-MON-YYYY') from dual;
                 03-SEP-99
                SQL> alter session set nls_date_format = 'MM-DD-YYYY';
                   Session altered.
                  
                SQL> select to_date('03-SEP-99','DD-MON-YY') from dual;
                   TO_DATE('0
                   ----------
                   09-03-1999 
                SQL> alter session set nls_date_format = 'RRRR-MM-DD';
                   Session altered. 
                  
                SQL> select to_date('03-SEP-1999','DD-MON-YYYY') from dual;
                   TO_DATE('0
                   ----------
                   1999-09-03 
                  
              When we use TO_CHAR function, we get expected results of format from current SQL statement: 
                SQL> alter session set nls_date_format = 'MM-DD-YY';
                   Session altered. 
                SQL> select to_char(sysdate,'dd-mm-yyyy') from dual;
                   TO_CHAR(SYSDATE,'DD-MM-YYYY') 
                   07-09-1999 
                SQL> alter session set nls_date_format = 'RR-MON-DD';
                   Session altered. 
                SQL> select to_char(sysdate,'dd-mon-yy') from dual;
                   TO_CHAR(SYSDATE,'DD-MON-YY') 
                   07-sep-99 
                SQL> select to_char(sysdate,'dd-Mon-yy') from dual;
                   TO_CHAR(SYSDATE,'DD-MON-YY') 
                   07-Sep-99
            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(tr .......

          posted on 2008-06-18 14:49 球球 閱讀(348) 評論(0)  編輯  收藏 所屬分類: Oracle

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          留言簿(1)

          文章分類(19)

          文章檔案(19)

          積分與排名

          最新隨筆

          最新評論

          主站蜘蛛池模板: 澄迈县| 花莲县| 邢台县| 玉山县| 临泉县| 修文县| 松溪县| 景德镇市| 方山县| 南宁市| 墨竹工卡县| 自贡市| 绿春县| 洛浦县| 阿坝县| 渭源县| 安岳县| 莱芜市| 松溪县| 馆陶县| 临泽县| 高州市| 阿荣旗| 金沙县| 福州市| 永德县| 建瓯市| 荥经县| 通河县| 金沙县| 鸡西市| 衡南县| 江川县| 冀州市| 兖州市| 平远县| 龙里县| 特克斯县| 辽源市| 建湖县| 磴口县|