Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1209518
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2007-12-24 22:38:41

DATEs内部也以长度字节存储,NULLs为0xFF,非null为7个字节。内部表示非常简单,可以通过dump查看。
SQL> create table dates (d date);
Table created
SQL> insert into dates values (to_date('18/5月/2002 15:06:00', 'DD/MON/YYYY HH24:MI:SS'));
1 row inserted
SQL> select dump(d) from dates;
DUMP(D)
--------------------------------------------------------------------------------
Typ=12 Len=7: 120,102,5,18,16,7,1
前面两个字节代表世纪和年,每个字节有100的偏移量以允许BC日期所需的负世纪和年。第三、四个字节代表月和日;最后三个字节代表时分秒,这三个字节都有1的偏移量以确保不会包含NULL值。格式如下:
byte 1: century + 100
byte 2: year + 100
byte 3: month
byte 4: day of month
byte 5: hour + 1
byte 6: minute + 1
byte 7: second + 1
以上仅仅应用于存储的日期。Oracle在内存中的用法稍有不同:
SQL> select dump(to_date('18/5月/2002 15:06:00', 'DD/MON/YYYY HH24:MI:SS')) from dual;
DUMP(TO_DATE('18/5月/200215:06
---------------------------------
Typ=13 Len=8: 210,7,5,18,15,6,0,0
内存结构被增加到4个字节的边界,时间部分没有偏移量,世纪和年以一个单符号两个字节的数字表示。由于存储在little-endian结构的机器上,字节被反转。应该读为7,210,或0x7D2,相对应于十进制的2002。
阅读(1084) | 评论(0) | 转发(0) |
0

上一篇:Oracle使用的buffer i/o

下一篇:Julian days bug

给主人留下些什么吧!~~