oracle 之特殊funxtions應用

liqilin0429發表於2011-09-01
第一:時間相加(對於day、hour、minute、second使用的是numtodsinterval函式,方法和numtoyminterval一樣。後面可以跟變數)
select numtodsinterval(10, 'day') + numtodsinterval(2, 'hour') +
 numtodsinterval(3, 'minute') + numtodsinterval(2.3312, 'second')
   from dual
+000000010 02:03:02.331200000
第二:使用dump函式可以檢視每一行的內部存數結構。
SQL> select cola,dump(cola) from test_char;
a Typ=96 Len=10: 97,32,32,32,32,32,32,32,32,32
aa Typ=96 Len=10: 97,97,32,32,32,32,32,32,32,32
aaa Typ=96 Len=10: 97,97,97,32,32,32,32,32,32,32
aaaa Typ=96 Len=10: 97,97,97,97,32,32,32,32,32,32
aaaaaaaaaa  Typ=96 Len=10: 97,97,97,97,97,97,97,97,97,97
Typ=96 表示資料型別的ID。Oracle為每一種資料型別都進行了編號。說明char型別的編號是96.
Len =10 表示所在的內部儲存的長度(用位元組表示)。雖然第一例只存了一個字元’a’,但是它還是佔用了10個位元組的空間。
97,32,32,32,32,32,32,32,32,32 表示內部儲存方式。可見oracle的內部儲存是以資料庫字符集進行儲存的。
97正好是字元a的ASCII碼。
可以使用chr函式把ASCII碼轉成字元。
SQL> select chr(97) from dual;
C
-
a
第三 規則
Numtodsinterval(n, 'second') 獲得秒的時間間隔
Numtodsinterval(n, 'minute') 獲得分的時間間隔
Numtodsinterval(n, 'month') 獲得月的時間間隔
Numtodsinterval(n, 'year') 獲得月的時間間隔
增加月份時要非常的小心,應該使用add_months函式。為什麼呢?
比如當前日期為2000-2-29日。增加一個月得到的日期就應該是2000-3-31
如果只是簡單的加30天或加31天,是無法實現的。所以必須使用add_months函式,它會自動來處理這種月末問題。對年份進行增加也會出現類似的問題

第四:interval的使用
SQL> select sysdate +interval '+3' month from dual;
SYSDATE+INTERV
--------------
01-12月-11
SQL> select sysdate +interval '+2' month from dual;
SYSDATE+INTERV
--------------
01-11月-11
SQL>  select to_date('2007-02-28','yyyy-mm-dd')+interval '+3' month from dual;
TO_DATE('2007-
--------------
28-5月 -07
 
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20976446/viewspace-706444/,如需轉載,請註明出處,否則將追究法律責任。

相關文章