Oracle基本数据类型存储格式浅析—日期类型(2)

文章作者 100test 发表时间 2007:11:28 13:59:55
来源 100Test.Com百考试题网


下面通过一个例子进行说明。
  SQL> create table test_time (col_time timestamp).
  表已创建。
  SQL> insert into test_time values (to_timestamp(’’0001-1-1 0:0:0.0’’, ’’syyyy-mm-dd hh24:mi:ss.ff’’)).
  已创建 1 行。
  SQL> insert into test_time values (to_timestamp(’’2000-1-1 0:0:0.0’’, ’’syyyy-mm-dd hh24:mi:ss.ff’’)).
  已创建 1 行。
  SQL> insert into test_time values (to_timestamp(’’9999-12-31 23:59:59.999999’’, ’’syyyy-mm-dd hh24:mi:ss.ff’’)).
  已创建 1 行。
  SQL> insert into test_time values (to_timestamp(’’-0001-1-1 0:0:0.0’’, ’’syyyy-mm-dd hh24:mi:ss.ff’’)).
  已创建 1 行。
  SQL> insert into test_time values (to_timestamp(’’-0100-3-4 13:2:3.234015’’, ’’syyyy-mm-dd hh24:mi:ss.ff’’)).
  已创建 1 行。
  SQL> insert into test_time values (systimestamp).
  已创建 1 行。
  SQL> insert into test_time values (to_timestamp(’’2000-1-1 0:0:0.123456789’’, ’’syyyy-mm-dd hh24:mi:ss.ff9’’)).
  已创建 1 行。
  SQL> commit.
  提交完成。
  SQL> 0select to_char(col_time, ’’syyyy-mm-dd hh24:mi:ss.ff9’’) time, dump(col_time) dump_time
  2 from test_time.
  TIME DUMP_TIME
------------------------------ ----------------------------------------------------
  0001-01-01 00:00:00.000000000 Typ=180 Len=7: 100,101,1,1,1,1,1
  2000-01-01 00:00:00.000000000 Typ=180 Len=7: 120,100,1,1,1,1,1
  9999-12-31 23:59:59.999999000 Typ=180 Len=11: 199,199,12,31,24,60,60,59,154,198,24
  -0001-01-01 00:00:00.000000000 Typ=180 Len=7: 100,99,1,1,1,1,1
  -0100-03-04 13:02:03.234015000 Typ=180 Len=11: 99,100,3,4,14,3,4,13,242,201,24
  2004-12-15 16:14:52.738000000 Typ=180 Len=11: 120,104,12,15,17,15,53,43,252,252,128
  2000-01-01 00:00:00.123457000 Typ=180 Len=11: 120,100,1,1,1,1,1,7,91,205,232
  已选择7行。

  与DATE类型对比可以发现,对于TIMESTAMP类型,如果不包含微秒信息或者微秒值为0,那么存储结果和DATE完全相同。当微秒值为0时,Oracle为了节省空间,不会保存微秒信息。

  如果毫秒值不为0,Oracle把微秒值当作一个9位数的数字来保存。
  比如999999000,保存为59,154,198,24。234015000保存为13,242,201,24。
  SQL> 0select to_char(999999000, ’’xxxxxxxxxx’’) from dual.
  TO_CHAR(999
-----------
  3b9ac618
  SQL> 0select to_number(’’3b’’, ’’xxx’’) one, to_number(’’9a’’, ’’xxx’’) two,
  2 to_number(’’c6’’, ’’xxx’’) three, to_number(’’18’’, ’’xxx’’) four from dual.
  ONE TWO THREE FOUR
---------- ---------- ---------- ----------
  59 154 198 24
  SQL> 0select to_char(234015000, ’’xxxxxxxx’’) from dual.
  TO_CHAR(2
---------
  df2c918
  SQL> 0select to_number(’’d’’, ’’xxx’’) one, to_number(’’f2’’, ’’xxx’’) two,
  2 to_number(’’c9’’, ’’xxx’’) three, to_number(’’18’’, ’’xxx’’) four from dual.
  ONE TWO THREE FOUR
---------- ---------- ---------- ----------
  13 242 201 24

相关文章


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