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。
阅读(1087) | 评论(0) | 转发(0) |