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 下午


相关文章


Oracle10g管理系统全局区(SGA)
如何在Oracle中使用游标来实现多重循环
想进入系统CMD?请输入密码
Oracle内存结构:Proce Memory的详细信息
Oracle基本数据类型存储格式浅析—日期类型(3)
Oracle基本数据类型存储格式浅析—日期类型(2)
Oracle基本数据类型存储格式浅析—日期类型(1)
推荐本科毕业生免试攻读硕士研究生的相关规定
08考研心理学考试-大纲解析之统计与测量
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛