关闭

Oracle Date类型与SQLT_DAT分析

标签: dateoraclebyte数据库integertable
2175人阅读 评论(0) 收藏 举报
分类:
日期DATE对应的OCI类型为SQLT_DAT,可以保存为7Bytes。下面是一个日期类型保存的事例:

Example (for 30-NOV-1992, 3:17 PM)
----------------------------------------------------------
Byte       1       2     3      4     5     6      7
----------------------------------------------------------
Meaning    Century Year  Month  Day   Hour  Minute Second    
Values     119     192   11     30    16    18     1
----------------------------------------------------------

解释:
Oracle的DATE类型的取值范围是公元前4712年1月1日至公元9999年12月31日。而且根据日期的特定,要不然是公元1年,要不然是公元前1年,

不会出现0年的情况。
  日期类型长度是7,7个字节分别表示世纪、年、月、日、时、分和秒。
  由于不会出现0的情况,月和日都是按照原值存储的,月的范围是1~12,日的范围是1~31。
  由于时、分、秒都会出现0的情况,因此存储时采用原值加1的方式。0时保存为1,13时保存为14,23时保存为24。分和秒的情况与小时类似。小时的范围是0~23,在数据库中以1~24保存。分和秒的范围都是0~59,在数据库中以1~60保存。
  年和世纪的情况相对比较复杂,可分为公元前和公元后两种情况。由于最小的世纪的值是-47(公元前4712年),最大值是99(公元9999年)。为了避免负数的产生, oracle把世纪加100保存在数据库中。公元2000年,世纪保存为120,公元9999年,世纪保存为199,公元前101年,世纪保存为99 (100+(-1)),公元前4712年,世纪保存为53(100+(-47))。
  注意,对于公元前1年,虽然已经是公元前了,但是表示世纪的前两位的值仍然是0,因此,这时的保存的世纪的值仍然是100。世纪的范围是-47~99,保存的值是53~199。
  年的保存与世纪的保存方式类似,也把年的值加上100进行保存。对于公元2000年,年保持为100,公元1年保存为101,公元2004年保存为104,公元9999 年保存为199,公元前1年,保存为99(100+(-1)),公元前101年,保存为99(100+(-1)),公元前4712年保存为88(100+(-12))。对于公元前的年,保存的值总是小于等于100,对于公元后的年,保存的值总是大于等于100。年的范围是0~99,保存的值是1~199。
  注意:一般的世纪,都包含了100年,而对于0世纪,由于包含公元前和公元后两部分且不包含0年,因此包含了198年。

Oracle OCI 文档内容如下:
DATE
The DATE datatype can update, insert, or retrieve a date value using the Oracle internal date binary format. A date in binary

format contains seven bytes, as shown in Table 3-4.

Table 3-4 Format of the DATE Datatype
Byte                     1     2     3     4     5     6     7
Meaning                 Century Year     Month     Day     Hour     Minute     Second
Example (for 30-NOV-1992, 3:17 PM)     119     192     11     30     16     18     1

The century and year bytes (bytes 1 and 2) are in excess-100 notation. The first byte stores the value of the year, which is

1992, as an integer, divided by 100, giving 119 in excess-100 notation. The second byte stores year modulo 100, giving 192.

Dates Before Common Era (BCE) are less than 100. The era begins on 01-JAN-4712 BCE, which is Julian day 1. For this date, the

century byte is 53, and the year byte is 88. The hour, minute, and second bytes are in excess-1 notation. The hour byte

ranges from 1 to 24, the minute and second bytes from 1 to 60. If no time was specified when the date was created, the time

defaults to midnight (1, 1, 1).

When you enter a date in binary format using the DATE external datatype, the database does not do consistency or range

checking. All data in this format must be carefully validated before input.
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:638077次
    • 积分:7303
    • 等级:
    • 排名:第3020名
    • 原创:120篇
    • 转载:74篇
    • 译文:0篇
    • 评论:68条
    最新评论