<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-28  評論-15  文章-81  trackbacks-0
    在oracle數據庫的開發中,常因為時間的問題大費周章,所以特地將ORACLE數據的日期函數收藏致此。乃供

    他日所查也。
      add_months(d,n) 日期d加n個月
      last_day(d) 包含d的月?的最后一天的日期
      new_time(d,a,b) a?區的日期和??d在b?區的日期和??
      next_day(d,day) 比日期d?,由day指定的周幾的日期
      sysdate 當前的系?日期和??
      greatest(d1,d2,...dn) ?出的日期列表中最后的日期
      least(d1,k2,...dn) ?出的日期列表中最早的日期
      to_char(d [,fmt]) 日期d按fmt指定的格式??成字符串
      to_date(st [,fmt]) 字符串st按fmt指定的格式?成日期?,若fmt忽略,st要用缺省格式
      round(d [,fmt]) 日期d按fmt指定格式舍入到最近的日期
      trunc(d [,fmt]) 日期d按fmt指定格式截斷到最近的日期
      to_date 字符串類型轉為換日期類型
    字符串中的相應位置上的字符,必須符合時間范圍的限制

    查詢Oracle日期格式
    ----------------------------------


    select * from nls_database_parameters;


    得到結果如下表: 表中NLS_DATE_FORMAT表示日期格式.
    PARAMETER VALUE
    ----------------------------------- -----------------------------------
    NLS_LANGUAGE AMERICAN
    NLS_TERRITORY AMERICA
    NLS_CURRENCY $
    NLS_ISO_CURRENCY AMERICA
    NLS_NUMERIC_CHARACTERS .,
    NLS_CHARACTERSET ZHS16GBK
    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
    NLS_NCHAR_CHARACTERSET ZHS16GBK
    NLS_RDBMS_VERSION 8.1.7.0.0

    或者查詢V$NLS_PARAMETERS表,
    select * from V$NLS_PARAMETERS;
    也有類似結果

    SQL>select to_date('2004-11-12 12-07-32','yyyy-mm-dd hh24-mi-ss') value from dual;
    VALUE
    -------------------
    2004.11.12 12:07:32

    SQL>select to_date('20041015') value from dual;
    VALUE
    -------------------
    2004.10.15 00:00:00

    SQL>select to_date('20041315') value from dual;
    ERROR 位于第 1 行:
    ORA-01861: 文字與格式字符串不匹配


    sysdate 當前日期和時間

    SQL>select sysdate value from dual;
    VALUE
    -------------------
    2003.11.23 17:09:01


    last_day 本月最后一天

    SQL>select last_day(sysdate) value from dual;
    VALUE
    -------------------
    2003.11.30 17:08:17


    add_months(d,n) 日期d后推n個月

    SQL>select add_months(sysdate,2) value from dual;
    VALUE
    -------------------
    2005.01.23 17:10:21


    next_day(d,day) 日期d之后的第一周中,指定的那天(指定星期的第幾天)是什么日期

    SQL>select next_day(sysdate,1) value from dual;
    VALUE
    -------------------
    2004.11.28 17:38:55

     


    [oracle/plsql]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)是從當前開始下一個星期五。后面的數字是從星期日開始算起。

    posted on 2007-12-18 23:15 譚明 閱讀(338) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 亚洲AV网一区二区三区| 免费VA在线观看无码| 亚洲人午夜射精精品日韩| 国产大片免费网站不卡美女| a级毛片免费高清视频| 亚洲国产精品美女久久久久| 久久久久亚洲av无码专区喷水| 亚洲国产综合无码一区二区二三区| 永久免费av无码网站韩国毛片 | 一色屋成人免费精品网站| 羞羞视频免费网站在线看| 精品亚洲视频在线| 亚洲国产综合精品中文第一| 久久夜色精品国产噜噜噜亚洲AV| 国产亚洲精品自在线观看| 免费吃奶摸下激烈视频| 在线精品免费视频无码的| 亚洲黄色在线电影| 久久九九亚洲精品| 伊人久久综在合线亚洲91| 亚洲第一成人影院| 四虎影在线永久免费四虎地址8848aa| 我的小后妈韩剧在线看免费高清版| 免费国产成人α片| 国产在线观看免费视频软件| 丝袜足液精子免费视频| 久久国产一片免费观看| 一级人做人a爰免费视频 | 国产精品免费看久久久无码| 天天影院成人免费观看| 久久精品一本到99热免费| 日韩精品免费在线视频| 久久国产乱子免费精品| 日本一道本不卡免费| a视频在线观看免费| 两性色午夜视频免费播放| 国产色爽免费无码视频| 国产免费一区二区视频| 免费人成黄页在线观看日本| 久久午夜夜伦鲁鲁片免费无码| 一个人看的www免费视频在线观看|