Oracle常用日期函數!

來源:互聯網
上載者:User

常用的時間格式掩碼如下:
掩碼元素       含義
YYYY       四位元年份 (如:2005)     year
YY         二位元年份(如  05)
Q          季度(1-4)
MM         月份(01-12)      month
WW         年的星期數(1-53),其中第一星期為年的第一天至第七天
W          月的星期數(1-5),其中第一星期為月的第一天至第七天
DDD        年的日(1-366)
DD         月的日(1-31)    
D          周的日(1-7),其中周日為1,周六為7    day
HH24       24小時制(0-23)     hour
MI         分鐘(0-59)     minute
SS         秒(0-59)     second
SSSSS      自午夜之後的秒(0-86399)


兩個很不錯的函數,可以操作日期,也可以運算元值:
        round(日期,'指定的日期掩碼')      返回日期時間的四捨五入結果
        指定的掩碼不同則結果結果也不同
    year           以 7月1日分界線
    month        以16號為分界線
    day            以中午12點為分界線
    hh             以30分鐘為分界線
    mi             以30秒為分界線

        trunc(日期,'指定的日期掩碼')        返回截斷時間
    year            本年度的1月1日
    month        本月的1號
    
例子:(注意: day    d    dd 三者的區別)
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-1-1
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-6-1
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-6-1
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-5-20
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-5-20
 
SQL> select round(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual;
ROUND(TO_DATE('2007051616:31:4
------------------------------
2007-5-17

SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'year') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-1-1
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'month') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-1
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'mm') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-1
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'day') from dual; 
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-13
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'d') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-13
 
SQL> select trunc(to_date('20070516 16:31:46','yyyymmdd hh24:mi:ss'),'dd') from dual;
TRUNC(TO_DATE('2007051616:31:4
------------------------------
2007-5-16

日期時間函數:
           add_months(日期,number)    指定日期延遲number個月
           last_day(日期)   指定日期當月的最後一天
           new_time(日期,時區簡寫)   調整時區
           next_day(日期,number)  number表示周幾,星期日是1,指定number的日期(一周內或一周后)
           months_between(日期1,日期2)   日期1和日期2之間有幾個月
           sysdate   系統當期那日期和時間
練習時的代碼:

select to_number(to_char(last_day(add_months(to_date('20040406','yyyymmdd'),-1))+1,'yyyymmdd')) from dual;
 
TO_NUMBER(TO_CHAR(LAST_DAY(ADD
------------------------------
                      20040401

select to_number(to_char(last_day(to_date('20040406','yyyymmdd')),'yyyymmdd')) from dual;

TO_NUMBER(TO_CHAR(LAST_DAY(ADD
------------------------------
                      20040430

create or replace procedure p_hkb_date_insert is
  /*
  過程功能描述:日期插入表中
  */

  v_days number(10);
  v_date date;
  i      number(10);

begin

  begin
    --取得當月天數
    select to_number(to_char(last_day(sysdate), 'dd'))
      into v_days
      from dual;
    --select sysdate from dual; 當前日期
    --select last_day(sysdate) from dual;  月底日期
    --select last_day(add_months(sysdate, -1)) from dual;   上月底日期
    -- SELECT   to_char(last_day(SYSDATE),'dd')   days   FROM   dual;    當前月的天數
    --select last_day(add_months(sysdate,-1))+1 from dual; 當前月第一天
    --select to_number(to_char(sysdate,'yyyymmdd')) from dual;系統當前日期轉換成如20070910格式:
 
  end;
  i := 1;
  begin
    select last_day(add_months(sysdate, -1)) into v_date from dual;
    while i <= v_days
   
     loop
      insert into hkb_date
      values
        (v_date + i,
         to_char(v_date + i, 'yyyymmdd'),
         to_number(to_char(v_date + i, 'yyyymmdd')));
      --insert into hkb_date
      --(float_date)
      -- values
      --(to_char(v_date + i, 'yyyymmdd'));
      -- insert into hkb_date
      --(number_date)
      -- values
      --(to_number(to_char(v_date + i, 'yyyymmdd')));
      i := i + 1;
    end loop;
  end;
end p_hkb_date_insert;

create table hkb_date_construct as select * from hkb_date where 1=2;  繼承表欄位

create table hkb_date_data as select * from hkb_date;  繼承表記錄

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.