oracle資料庫日期格式
㈠ Oracle基本數據類型存儲格式淺析—日期類型(3)
對於公元前的日期 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= : b b fc c Typ= Len= : b b fc c Typ= Len= : b b fc c c c
可以發現 如果客戶端和資料庫中的時區是一致的 那麼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> MIT;
提交完成
修改客戶端主機的時區 改回東 區(+ 時區)
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= : b b fc c Typ= Len= : b b fc c Typ= Len= : b b fc c c c
Typ= Len= : b c c c e Typ= Len= : b c c c e Typ= Len= : b c c c e c
Typ= Len= : b b f a d c c Typ= Len= : b f a d c c Typ= Len= : b f a d c c f c
Typ= Len= : b b a f Typ= Len= : b b a f Typ= Len= : b b a f c
Typ= Len= : c f d Typ= Len= : b f d Typ= Len= : b f d c
Typ= Len= : b f cb bb c Typ= Len= : c e cb bb c Typ= Len= : b e cb bb c e
Typ= Len= : c b b Typ= Len= : c f b b Typ= Len= : b f b b d a
SQL> SELECT TO_NUMBER( C XXX ) TO_NUMBER( C XXX ) FROM DUAL;
TO_NUMBER( C XXX ) TO_NUMBER( C XXX )
SQL> SELECT TO_NUMBER( XXX ) TO_NUMBER( C XXX ) TO_NUMBER( C XXXXXXX ) FROM DUAL;
TO_NUMBER( XXX ) TO_NUMBER( C XXX )
SQL> SELECT TO_NUMBER( C XXX ) TO_NUMBER( E XXX ) TO_NUMBER( A XXX ) FROM DUAL;
TO_NUMBER( C XXX ) TO_NUMBER( E XXX ) TO_NUMBER( A XXX )
可以看出 修改時區會導致系統TIMESTAMP時間發生變化 但是對於TIMESTAMP WITH LOCAL TIME ZONE類型 總是將系統的時間轉化到資料庫伺服器上時區的時間進行存儲
TIMESTAMP WITH TIME ZONE保存的是當前時間轉化到 時區的對應的時間 並通過最後兩位來保存時區信息
第一位表示時區的小時部分 時區用 x 表示 東n區在這個基礎上加n 西n區在這個基礎上減n 我們所處的東 區表示為 x C 西 區表示為 xF
lishixin/Article/program/Oracle/201311/18690