熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

oracle中的INTERVAL函數詳解

2013-11-13 15:26:21  來源: Oracle 

  oracle中的INTERVAL函數詳解

  INTERVAL YEAR TO MONTH數據類型

  Oracle語法:

  INTERVAL integer [ integer] {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]

  該數據類型常用來表示一段時間差 注意時間差只精確到年和月 precision為年或月的精確域 有效范圍是 默認值為

  eg:

  INTERVAL YEAR() TO MONTH

  表示: 個月 YEAR() 表示年的精度為 可見剛好為為有效數值 如果該處YEAR(n) n<就會出錯 注意默認是

  INTERVAL YEAR()

  表示: 個月

  INTERVAL MONTH()

  表示: 個月 注意該處MONTH的精度是

  INTERVAL YEAR

  表示: 同 INTERVAL YEAR TO MONTH 是一樣的

  INTERVAL MONTH

  表示: 個月 同 INTERVAL YEAR TO MONTH 是一樣

  INTERVAL YEAR

  表示: 該處表示有錯誤 精度是 但系統默認是 所以該處應該寫成 INTERVAL YEAR() 或改成大於小於等於的數值都可以的

  INTERVAL YEAR TO MONTH + INTERVAL MONTH =

  INTERVAL YEAR TO MONTH

  表示: 個月 + 個月 = 個月

  與該類型相關的函數:

  NUMTODSINTERVAL(n interval_unit)

  將n轉換成interval_unit所指定的值 interval_unit可以為: DAY HOUR MINUTE SECOND

  注意該函數不可以轉換成YEAR和MONTH的

  NUMTOYMINTERVAL(n interval_unit)

  interval_unit可以為: YEAR MONTH

  eg: (Oracle Version RedHat Linux )

  SQL> select numtodsinterval(DAY) from dual;

  NUMTODSINTERVAL(DAY)

  

  + ::

  SQL> c/DAY/SECOND

  * select numtodsinterval(SECOND) from dual

  SQL> /

  NUMTODSINTERVAL(SECOND)

  

  + ::

  SQL> c/SECOND/MINUTE

  * select numtodsinterval(MINUTE) from dual

  SQL> /

  NUMTODSINTERVAL(MINUTE)

  

  + ::

  SQL> c/MINUTE/HOUR

  * select numtodsinterval(HOUR) from dual

  SQL> /

  NUMTODSINTERVAL(HOUR)

  

  + ::

  SQL> c/HOUR/YEAR

  * select numtodsinterval(YEAR) from dual

  SQL> /

  select numtodsinterval(YEAR) from dual

  *

  ERROR at line :

  ORA: illegal argument for function

  SQL> select numtoyminterval(year) from dual;

  NUMTOYMINTERVAL(YEAR)

  

  +

  SQL> c/year/month

  * select numtoyminterval(month) from dual

  SQL> /

  NUMTOYMINTERVAL(MONTH)

  

  +

  時間的計算:

  SQL> select to_date(yyyymmdd) to_date(yyyymmdd) from dual;

  TO_DATE(YYYYMMDD)TO_DATE(YYYYMMDD)

  

  

   可以相減的結果為天

  SQL> c//

  * select to_date(yyyymmdd) to_date(yyyymmdd) from dual

  SQL> /

  TO_DATE(YYYYMMDD)TO_DATE(YYYYMMDD)

  

  

   也可以為負數的

  SQL> c//

  * select to_date(yyyymmdd) to_date(yyyymmdd) from dual

  SQL> /

  TO_DATE(YYYYMMDD)TO_DATE(YYYYMMDD)

  

  

  下面看看INTERVAL YEAR TO MONTH怎麼用

  SQL> create table bb(a date b date c interval year() to month);

  Table created

  SQL> desc bb;

  Name Null? Type

  

  A DATE

  B DATE

  C INTERVAL YEAR() TO MONTH

  SQL> insert into bb values(to_date( yyyymmdd) to_date(yyyymmdd) null)

   row created

  SQL> select * from bb;

  A B

  

  C

  

  DEC DEC

  SQL> update bb set c = numtoyminterval(ab year);

   row updated

  SQL> select * from bb;

  A B

  

  C

  

  DEC DEC

  +

   直接將相減的天變成年了 因為我指定變成年的

  SQL> select ab c from bb;

  AB

  

  C

  

  

  +

  SQL> insert into bb values(nullnullnumtoyminterval(month));

   row created

  SQL> select * from bb;

  A B C

  

  DEC DEC +

  +

  SQL> insert into bb values ( nullnull numtoyminterval(year));

   row created

  SQL> select * from bb;

  A B C

  

  DEC DEC +

  +

  +

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

  INTERVAL YEAR TO MONTH類型個TIMESTAMP類型的時間差別內部類型是長度是其中個字節存儲年份差異存儲的時候在差異上加了一個X的偏移量一個字節存儲月份的差異這個差異加了的偏移量

  SQL> ALTER TABLE TestTimeStamp ADD E INTERVAL YEAR TO MONTH;

  SQL> update testTimeStamp set e=(select interval year + interval month year from dual);

  已更新

  SQL> commit;

  提交完成

  SQL> select dump(e) from testTimeStamp;

  DUMP(E)

  

  Typ= Len=:

  Typ= Len=:

  Typ= Len=:

  年XX=

  月x=

  INTERVAL DAY TO SECOND數據類型

  Oracle語法:

  INTERVAL { integer | integer time_expr | time_expr }

  { { DAY | HOUR | MINUTE } [ ( leading_precision ) ]

  | SECOND [ ( leading_precision [ fractional_seconds_precision ] ) ] }

  [ TO { DAY | HOUR | MINUTE | SECOND [ (fractional_seconds_precision) ] } ]

  leading_precision值的范圍是 默認是 time_expr的格式為:HH[:MI[:SS[n]]] or MI[:SS[n]] or SS[n] n表示微秒

  該類型與INTERVAL YEAR TO MONTH有很多相似的地方建議先看INTERVAL YEAR TO MONTH再看該文

  范圍值:

  HOUR: to

  MINUTE: to

  SECOND: to

  eg:

  INTERVAL :: DAY TO SECOND()

  表示: 小時

  INTERVAL : DAY TO MINUTE

  表示: 小時

  INTERVAL DAY() TO HOUR

  表示: 小時 為精度所以DAY() 注意默認值為

  INTERVAL DAY()

  表示:

  INTERVAL :: HOUR TO SECOND()

  表示: 小時

  INTERVAL : HOUR TO MINUTE

  表示: 小時

  INTERVAL HOUR

  表示: 小時

  INTERVAL : MINUTE TO SECOND

  表示:

  INTERVAL MINUTE

  表示:

  INTERVAL DAY

  表示:

  INTERVAL HOUR

  表示: 小時

  INTERVAL MINUTE

  表示:

  INTERVAL HOUR()

  表示: 小時

  INTERVAL SECOND()

  表示: 因為該地方秒的後面精度設置為 要進行四捨五入

  INTERVAL DAY INTERVAL HOUR = INTERVAL DAY TO SECOND

  表示: 小時 =

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

  INTERVAL DAY TO SECOND類型存儲兩個TIMESTAMP之間的時間差異用日期小時分鐘秒鐘形式表示該數據類型的內部代碼是長度位字節

  l 個字節表示天數(增加X偏移量)

  l 小時分鐘秒鐘各用一個字節表示(增加偏移量)

  l 個字節表示秒鐘的小時差異(增加X偏移量)

  以下是一個例子

  SQL> alter table testTimeStamp add f interval day to second ;

  表已更改

  SQL> update testTimeStamp set f=(select interval day + interval second from dual);

  已更新

  SQL> commit;

  提交完成

  SQL> select dump(f) from testTimeStamp;

  DUMP(F)

  

  Typ= Len=: cc

  Typ= Len=: cc

  Typ= Len=: cc

  日期XX=

  小時=

  分鐘=

  秒鐘=

  秒鐘小數部分XX=


From:http://tw.wingwit.com/Article/program/Oracle/201311/16710.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.