1. 程式人生 > >oracle對日期date類型操作的函數

oracle對日期date類型操作的函數

加減 輸入 sql min 單位 mda oracl sin amp

無論是DATE還是timestamp都可以進行加減操作

  1. 加一個簡單的數來增加天
  2. max,min來求其最大最小日期
  3. avg,sum就只能先轉成數字類型才可用
  4. 使用內置函數add_months來增加年和月
  5. 使用內置函數numtoyminterval增加年,月
  6. 使用內置函數numtodsinterval增加小時,分鐘和秒

umtoyminterval函數——數字轉換函數

語法:NUMTOYMINTERVAL ( n , ‘char_expr‘ )
char_expr:日期描述,可以是YEAR和MONTH
作用:可以將數字轉換成相應的日期單位時間
NUMTOYMINTERVAL ( 1, ‘MONTH‘ ) 表示一個月

NUMTOYMINTERVAL ( 1, ‘YEAR‘ ) 表示一年

numtodsinterval函數——數字轉換函數

語法:NUMTOYMINTERVAL ( n , ‘char_expr‘ )
char_expr:日期描述,可以是day、hour、minute、second
作用:可以將數字轉換成相應的日期單位時間
NUMTOYMINTERVAL ( 1, ‘day‘ ) 表示一天
NUMTOYMINTERVAL ( 1, ‘hour‘ ) 表示一個小時

通常當我們使用add_month添加月時,如果輸入是本月月底的日期,那麽得到的也是月底的日期,
比如add_months(to_date(‘2007-02-28‘,‘yyyy-mm-dd‘),1)得到的就會是‘2007-03-31‘,而不是‘2007-03-28‘。

此時,如果使用的是to_date(‘2007-02-28‘,‘yyyy-mm-dd‘)+numtoyminterval(1,‘month‘),那麽得到的就是‘2007-03-28‘。

例子示範

對當前日期增加一個小時:
SQL> select sysdate, sysdate+numtodsinterval(1,’hour’) from dual ;

SYSDATE SYSDATE+NUMTODSINTE
——————- ——————-

2010-10-14 21:38:19 2010-10-14 22:38:19
對當前日期增加50分種
SQL> select sysdate, sysdate+numtodsinterval(50,’minute’) from dual ;

SYSDATE SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:39:12 2010-10-14 22:29:12
對當前日期增加45秒
SQL> select sysdate, sysdate+numtodsinterval(45,’second’) from dual ;

SYSDATE SYSDATE+NUMTODSINTE
——————- ——————-
2010-10-14 21:40:06 2010-10-14 21:40:51
對當前日期增加3天
SQL> select sysdate, sysdate+3 from dual ;

SYSDATE SYSDATE+3
——————- ——————-
2010-10-14 21:40:46 2010-10-17 21:40:46
對當前日期增加4個月
SQL> select sysdate, add_months(sysdate,4) from dual ;

SYSDATE ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:41:43 2011-02-14 21:41:43

當前日期增加2年
SQL> select sysdate, add_months(sysdate,12*2) from dual ;

SYSDATE ADD_MONTHS(SYSDATE,
——————- ——————-
2010-10-14 21:42:17 2012-10-14 21:42:17

timestamp的操作方法與上面類似;
求兩個日期之差:
例:求2007-5-23 21:23:34與當前時間之間的差值。
SQL> select sysdate-to_date(’20070523 21:23:34′,’yyyy-mm-dd hh24:mi:ss’) dt from
dual ;

DT
———-
1240.01623

oracle對日期date類型操作的函數