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

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

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

    隨筆-314  評論-209  文章-0  trackbacks-0
    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 2006-08-10 16:34 xzc 閱讀(2682) 評論(8)  編輯  收藏 所屬分類: Oracle

    評論:
    # re: oracle日期處理完全版[未登錄] 2007-01-29 12:57 | xzc
    select 1,to_char(sysdate,'Day,Month DD,YYYY','NLS_DATE_LANGUAGE = American') from dual  回復  更多評論
      
    # re: oracle日期處理完全版 2007-09-14 12:56 | xzc
    Oracle時間日期操作
    sysdate+(5/24/60/60) 在系統時間基礎上延遲5秒
    sysdate+5/24/60 在系統時間基礎上延遲5分鐘
    sysdate+5/24 在系統時間基礎上延遲5小時
    sysdate+5 在系統時間基礎上延遲5天
    add_months(sysdate,-5) 在系統時間基礎上延遲5月
    add_months(sysdate,-5*12) 在系統時間基礎上延遲5年


    上月末的日期:select last_day(add_months(sysdate, -1)) from dual;
    本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual
    本周星期一的日期:select trunc(sysdate,'day')+1 from dual


    年初至今的天數:select ceil(sysdate - trunc(sysdate, 'year')) from dual;

    今天是今年的第幾周 :select to_char(sysdate,'fmww') from dual
    今天是本月的第幾周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" FROM dual

    本月的天數
    SELECT to_char(last_day(SYSDATE),'dd') days FROM dual
    今年的天數
    select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
    下個星期一的日期
    SELECT Next_day(SYSDATE,'monday') FROM dual  回復  更多評論
      
    # re: oracle日期處理完全版 2007-09-14 12:57 | xzc
    ============================================

    --計算工作日方法

    create table t(s date,e date);
    alter session set nls_date_format = 'yyyy-mm-dd';
    insert into t values('2003-03-01','2003-03-03');
    insert into t values('2003-03-02','2003-03-03');
    insert into t values('2003-03-07','2003-03-08');
    insert into t values('2003-03-07','2003-03-09');
    insert into t values('2003-03-05','2003-03-07');
    insert into t values('2003-02-01','2003-03-31');

    -- 這里假定日期都是不帶時間的,否則在所有日期前加trunc即可。
    select s,e,e-s+1 total_days,
    trunc((e-s+1)/7)*5 + length(replace(substr('01111100111110',to_char(s,'d'),mod(e-s+1,7)),'0','')) work_days
    from t;

    -- drop table t;

    引此:http://www.itpub.net/showthread.php?s=1635506cd5f48b1bc3adbe4cde96f227&threadid=104060&perpage=15&pagenumber=1


    ================================================================================

    判斷當前時間是上午下午還是晚上

    SELECT CASE
    WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 6 AND 11 THEN '上午'
    WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 11 AND 17 THEN '下午'
    WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 17 AND 21 THEN '晚上'
    END
    FROM dual;


    ================================================================================

    Oracle 中的一些處理日期



    將數字轉換為任意時間格式.如秒:需要轉換為天/小時
    SELECT to_char(floor(TRUNC(936000/(60*60))/24))||'天'||to_char(mod(TRUNC(936000/(60*60)),24))||'小時' FROM DUAL
      回復  更多評論
      
    # re: oracle日期處理完全版[未登錄] 2009-07-05 05:07 | aa
    6中的a_date是什么?  回復  更多評論
      
    # re: oracle日期處理完全版 2010-05-13 21:10 | xzc
    題目: 輸入4個值[2008,12,2009,2], 要求一段SQL, 不另創新表, 得到如下結果:

    12 2008-12-1 2008-12-31
    01 2009-1-1 2009-1-31
    02 2009-2-1 2009-2-28

    條件: 起始年, 起始月, 截至年, 截至月
    結果: 月份, 月的第一天, 月的最后一天
    解答:
    Sql代碼
    select to_char(tt.d, 'mm'), tt.d, last_day(tt.d)
    from (select ADD_MONTHS(zz.s, rownum - 1) d
    from (select to_date('2008' || '12' || '01', 'yyyymmdd') s,
    to_date('2009' || '02' || '01', 'yyyymmdd') e
    from dual) zz,
    (select * from user_objects)
    where rownum <= MONTHS_BETWEEN(zz.e, zz.s) + 1) tt

    select to_char(tt.d, 'mm'), tt.d, last_day(tt.d)
    from (select ADD_MONTHS(zz.s, rownum - 1) d
    from (select to_date('2008' || '12' || '01', 'yyyymmdd') s,
    to_date('2009' || '02' || '01', 'yyyymmdd') e
    from dual) zz,
    (select * from user_objects)
    where rownum <= MONTHS_BETWEEN(zz.e, zz.s) + 1) tt
    分析: 這個題目比較難, 因為考察了很多的Oracle特有的函數,表(視圖).

    rownum 行號
    ADD_MONTHS 日期函數,給一個日期加一個月數,得到這個月數后的日期
    to_date 日期函數, 將一個字符以一定格式轉成日期
    to_char 字符函數, 以一定格式得到字符
    last_day 日期函數, 得到某日所在月的最后一天
    MONTHS_BETWEEN 日期函數, 得到兩個日期間隔的月數
      回復  更多評論
      
    # re: oracle日期處理完全版 2010-05-14 20:35 | xzc
    select to_char(cur_month, 'MM'), cur_month, last_day(cur_month)
    from (select aa.begin_month, rownum, add_months(aa.begin_month, rownum - 1) cur_month
    from (select to_date('2008' || '12', 'YYYYMM') begin_month, to_date('2009' || '02', 'YYYYMM') end_month
    from dual) aa,
    all_objects bb
    where rownum <= months_between(aa.end_month, aa.begin_month) + 1)
      回復  更多評論
      
    # re: oracle日期處理完全版[未登錄] 2012-06-01 09:36 | xzc
    --當月的日列表
    select to_char(sysdate - rownum, 'YYYYMMDD') day_id from user_objects where rownum < to_char(sysdate, 'DD');
    --某月的日列表
    select to_char(to_date('201007', 'YYYYMM') - 1 + rownum, 'YYYYMMDD') day_id
    from user_objects
    where rownum <= to_char(last_day(to_date('201007', 'YYYYMM')), 'DD');  回復  更多評論
      
    # re: oracle日期處理完全版[未登錄] 2012-06-01 10:37 | xzc
    --周末
    select day_id, to_char(day_id, 'DAY')
    from (select to_date('201205', 'YYYYMM') - 1 + rownum day_id
    from user_objects
    where rownum <= to_char(last_day(to_date('201205', 'YYYYMM')), 'DD'))
    where to_char(day_id, 'd') in (1, 7);
    select to_char(day_id, 'YYYYMMDD')
    from (select to_date('20120526', 'YYYYMMDD') - rownum + 1 day_id
    from user_objects
    where rownum <= substr(20120526, 7, 2))
    where to_char(day_id, 'd') in (1, 7);
    --星期一~星期五
    select day_id, to_char(day_id, 'DAY')
    from (select to_date('201205', 'YYYYMM') - 1 + rownum day_id
    from user_objects
    where rownum <= to_char(last_day(to_date('201205', 'YYYYMM')), 'DD'))
    where to_char(day_id, 'd') in (2, 3, 4, 5, 6);
    select to_char(day_id, 'YYYYMMDD')
    from (select to_date('20120526', 'YYYYMMDD') - rownum + 1 day_id
    from user_objects
    where rownum <= substr(20120526, 7, 2))
    where to_char(day_id, 'd') in (2, 3, 4, 5, 6);  回復  更多評論
      
    主站蜘蛛池模板: 亚洲午夜精品一级在线播放放| 亚洲国产成人无码AV在线影院| 日本道免费精品一区二区| 亚洲av无码专区在线观看素人| 亚洲中文字幕久久精品无码VA | 一区二区在线免费观看| 亚洲综合另类小说色区| 日韩大片在线永久免费观看网站| 在线成人a毛片免费播放| 精品丝袜国产自在线拍亚洲| 日本免费网站视频www区| 久久久久亚洲av无码专区喷水| 永久在线观看免费视频| 超清首页国产亚洲丝袜| 国产精品免费看久久久香蕉 | 最新国产乱人伦偷精品免费网站| 国产日韩成人亚洲丁香婷婷| 色哟哟国产精品免费观看| 波多野结衣一区二区免费视频| 日本亚洲中午字幕乱码| 国产老女人精品免费视频| 亚洲爆乳精品无码一区二区| 免费羞羞视频网站| 久久精品国产亚洲av瑜伽| 免费无码黄网站在线观看| 亚洲国产无线乱码在线观看| 午夜视频在线观看免费完整版| 亚洲国产精品日韩av不卡在线| 精品久久洲久久久久护士免费| a毛片免费全部播放完整成| 国产乱子伦片免费观看中字| 含羞草国产亚洲精品岁国产精品| 日日操夜夜操免费视频| 激情婷婷成人亚洲综合| 亚洲成人影院在线观看| 久久国产福利免费| 亚洲av永久无码制服河南实里| 99久9在线|免费| 亚洲自国产拍揄拍| 国产精品四虎在线观看免费| 全黄A免费一级毛片|