Oracle基本数据类型存储格式浅析—日期类型(3)
文章作者 100test 发表时间 2007:11:28 13:59:55
来源 100Test.Com百考试题网
对于公元前的日期,Oracle从255,255开始保存。公元前的年的保存的值和对应的公元后的年的值相加的和是256,255。如上例中的公元2004年和公元前2004年的值相加:212 44=256,7 248=255。
SQL中DATE类型最后还包括一个0,似乎目前没有使用。
SQL> CREATE TABLE TEST_TIMESTAMP(TIME1 TIMESTAMP(9), TIME2 TIMESTAMP(6) WITH LOCAL TIME ZONE,
2 TIME3 TIMESTAMP(4) WITH TIME ZONE).
表已创建。
SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP, SYSTIMESTAMP, SYSTIMESTAMP).
已创建 1 行。
SQL> SELECT * FROM TEST_TIMESTAMP.
TIME1
----------------------------------------------------
TIME2
----------------------------------------------------
TIME3
----------------------------------------------------
11-1月 -05 11.08.15.027000000 下午
11-1月 -05 11.08.15.027000 下午
11-1月 -05 11.08.15.0270 下午 08:00
SQL> SELECT DUMP(TIME1, 16), DUMP(TIME2, 16), DUMP(TIME3, 16) FROM TEST_TIMESTAMP.
DUMP(TIME1,16)
-------------------------------------------------------------
DUMP(TIME2,16)
-------------------------------------------------------------
DUMP(TIME3,16)
-------------------------------------------------------------
Typ=180 Len=11: 78,69,1,b,18,9,10,1,9b,fc,c0
Typ=231 Len=11: 78,69,1,b,18,9,10,1,9b,fc,c0
Typ=181 Len=13: 78,69,1,b,10,9,10,1,9b,fc,c0,1c,3c
可以发现,如果客户端和数据库中的时区是一致的,那么TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE存储的数据是完全一样的。
TIMESTAMP WITH TIME ZONE则略有不同,它保存的是0时区的时间,和所处的时区信息。
修改客户端主机的时区,由东8区( 8区)改为0时区。
SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP, SYSTIMESTAMP, SYSTIMESTAMP).
已创建 1 行。
修改客户端主机的时区,改为西5区(-5时区)。
SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP, SYSTIMESTAMP, SYSTIMESTAMP).
已创建 1 行。
修改客户端主机的时区,改为西12区(-12时区)。
SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP, SYSTIMESTAMP, SYSTIMESTAMP).
已创建 1 行。
修改客户端主机的时区,改为东13区( 13时区)。
SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP, SYSTIMESTAMP, SYSTIMESTAMP).
已创建 1 行。
修改客户端主机的时区,改为西3.5区(-3.5时区)。
SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP, SYSTIMESTAMP, SYSTIMESTAMP).
已创建 1 行。
修改客户端主机的时区,改为东9.5区( 9.5时区)。
SQL> INSERT INTO TEST_TIMESTAMP VALUES (SYSTIMESTAMP, SYSTIMESTAMP, SYSTIMESTAMP).
已创建 1 行。
SQL> COMMIT.
提交完成。
修改客户端主机的时区,改回东8区( 8时区)。
SQL> SELECT * FROM TEST_TIMESTAMP.
TIME1
-----------------------------------------------
TIME2
-----------------------------------------------
TIME3
-----------------------------------------------
11-1月 -05 11.08.15.027000000 下午
11-1月 -05 11.08.15.027000 下午
11-1月 -05 11.08.15.0270 下午 08:00
11-1月 -05 03.11.43.746000000 下午
11-1月 -05 11.11.43.746000 下午
11-1月 -05 03.11.43.7460 下午 00:00
11-1月 -05 10.14.08.987000000 上午
11-1月 -05 11.14.08.987000 下午