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

Oracle基本數據類型存儲格式淺析—日期類型(3)

2013-11-13 22:17:03  來源: Oracle 

  對於公元前的日期Oracle從開始保存公元前的年的保存的值和對應的公元後的年的值相加的和是如上例中的公元年和公元前年的值相加+=+=

  SQL中DATE類型最後還包括一個似乎目前沒有使用

  SQL> CREATE TABLE TEST_TIMESTAMP(TIME TIMESTAMP() TIME TIMESTAMP() WITH LOCAL TIME ZONE
TIME TIMESTAMP() WITH TIME ZONE);

  表已創建

  SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

  已創建

  SQL> SELECT * FROM TEST_TIMESTAMP;

  TIME

TIME

TIME

下午
下午
下午 +:

  SQL> SELECT DUMP(TIME ) DUMP(TIME ) DUMP(TIME ) FROM TEST_TIMESTAMP;

  DUMP(TIME)

DUMP(TIME)

DUMP(TIME)

Typ= Len=: bbfcc
Typ= Len=: bbfcc
Typ= Len=: bbfcccc

  可以發現如果客戶端和數據庫中的時區是一致的那麼TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE存儲的數據是完全一樣的

  TIMESTAMP WITH TIME ZONE則略有不同它保存的是時區的時間和所處的時區信息

  修改客戶端主機的時區由東區(+區)改為時區

  SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

  已創建

  修改客戶端主機的時區改為西區(時區)

  SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

  已創建

  修改客戶端主機的時區改為西區(時區)

  SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

  已創建

  修改客戶端主機的時區改為東區(+時區)

  SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

  已創建

  修改客戶端主機的時區改為西區(時區)

  SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

  已創建

  修改客戶端主機的時區改為東區(+時區)

  SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP SYSTIMESTAMP SYSTIMESTAMP);

  已創建

  SQL> COMMIT;

  提交完成

  修改客戶端主機的時區改回東區(+時區)

  SQL> SELECT * FROM TEST_TIMESTAMP;

  TIME

TIME

TIME

下午
下午
下午 +:

   下午
下午
下午 +:

   上午
下午
上午 :

   上午
下午
上午 :

   上午
下午
上午 +:

   下午
上午
下午 :

   上午
上午
上午 +:

  已選擇

  SQL> SELECT DUMP(TIME ) DUMP(TIME ) DUMP(TIME ) FROM TEST_TIMESTAMP;

  DUMP(TIME)

DUMP(TIME)

DUMP(TIME)

Typ= Len=: bbfcc
Typ= Len=: bbfcc
Typ= Len=: bbfcccc

  Typ= Len=: bccce
Typ= Len=: bccce
Typ= Len=: bcccec

  Typ= Len=: bbfadcc
Typ= Len=: bfadcc
Typ= Len=: bfadccfc

  Typ= Len=: bbaf
Typ= Len=: bbaf
Typ= Len=: bbafc

  Typ= Len=: cfd
Typ= Len=: bfd
Typ= Len=: bfdc

  Typ= Len=: bfcbbbc
Typ= Len=: cecbbbc
Typ= Len=: becbbbce

  Typ= Len=: cbb
Typ= Len=: cfbb
Typ= Len=: bfbbda

  SQL> SELECT TO_NUMBER(C XXX) TO_NUMBER(C XXX) FROM DUAL;

  TO_NUMBER(CXXX) TO_NUMBER(CXXX)

  SQL> SELECT TO_NUMBER( XXX) TO_NUMBER(C XXX) TO_NUMBER(C XXXXXXX) FROM DUAL;

  TO_NUMBER(XXX) TO_NUMBER(CXXX)

  SQL> SELECT TO_NUMBER(C XXX) TO_NUMBER(E XXX) TO_NUMBER(A XXX) FROM DUAL;

  TO_NUMBER(CXXX) TO_NUMBER(EXXX) TO_NUMBER(AXXX)

  可以看出修改時區會導致系統TIMESTAMP時間發生變化但是對於TIMESTAMP WITH LOCAL TIME ZONE類型總是將系統的時間轉化到數據庫服務器上時區的時間進行存儲

  TIMESTAMP WITH TIME ZONE保存的是當前時間轉化到時區的對應的時間並通過最後兩位來保存時區信息

  第一位表示時區的小時部分時區用x表示東n區在這個基礎上加n西n區在這個基礎上減n我們所處的東區表示為xC西區表示為xF

  第二位表示時區的分鐘部分標准是xC分鐘對於東時區的半區在這個基礎上加上分鐘如果是西時區則減去分鐘


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