Oracle Date类型与SQLT_DAT分析

转载 2007年09月20日 21:58:00
日期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.
 

Oracle数据库中关于日期和时间字段类型

与日期有关的有三种类型:date,timestamp与interval。DATE和TIMESTAMP类型存储精度可变的固定日期/时间,二者区别是,后者秒可以精确到小数,另外还可以有时区之分。。INTE...
  • aihongmingqi
  • aihongmingqi
  • 2014年08月29日 09:09
  • 13114

oracle中date类型的比较

oracle日期 条件 查询
  • hdblocal
  • hdblocal
  • 2016年06月20日 17:11
  • 2720

Linux下使用C/C++访问数据库——Oracle之OCI篇

一、什么是OCI? 开发基于Oracle数据库的应用程序,我们可以选择多种工具,不仅可以用一般的数据库开发技术,诸如ADO(ActiveX Data Objects)、ODBC(Open Dat...
  • jinangl
  • jinangl
  • 2014年02月18日 11:16
  • 1100

oracle 数据类型详解---日期型

oracle 数据类型详解---日期型(转载) oracle 数据类型详解---日期型         oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据...
  • mikean
  • mikean
  • 2014年03月13日 16:44
  • 1836

Oracle日期类型Date和timestamp需要注意的地方

Oracle中,常用的日期类型有Date和timestamp,当表定义好之后,写SQL需要注意什么问题呢?来做一个实现: drop table test  purge; drop table te...
  • guogang83
  • guogang83
  • 2016年10月26日 15:15
  • 1136

JDBC读取Oracle DATE类型数据没有时分秒

文章出处:http://www.365mini.com/page/jdbc-get-oracle-date-type.htm   非常感谢 众所周知,Oracle中的日期类型有Dat...
  • yueyeqingshan
  • yueyeqingshan
  • 2017年02月14日 16:07
  • 1458

Oracle中TO_DATE格式数据按年月日汇总

oracle数据库中分别提取出date年月日和时间 to_char(date,'YYYY')--年 to_char(date,'MM')--月 to_char(date,'DD')--日 to_cha...
  • yjq30604
  • yjq30604
  • 2015年08月14日 09:12
  • 1465

Jfinal对Oracle数据库Date类型的字段个人感觉不是很好

在项目开发当中使用了jfinal框架,数据库使用的是Oracle,在处理一个表字段类型为Date类型的时候,使用Db.save()方法时,保存的时候使用model.set("create_time",...
  • huangbaokang
  • huangbaokang
  • 2017年06月26日 17:38
  • 946

Java通过mybatis插入Oracle数据库中Date格式不显示到时分秒问题

用mybatis generator生成代码后,执行查询语句时,Oracle里的Date类型字段只精确到年月日,后面时分秒都为零。 后来发现是jdbcType问题,改成 jdbcType="TIMES...
  • Jay_1989
  • Jay_1989
  • 2017年06月01日 14:46
  • 2564

Java 读取Oracle数据库中的Date日期型怎么去掉秒后面的0

 Oracle数据去0 分享方法 :为什么多了一个0,数据库里面的数据是没有0的,取出来的时候多了一个0,这是Oracle数据搞的鬼,解决代码如下 可参考 [j...
  • konglongaa
  • konglongaa
  • 2017年03月10日 17:39
  • 1220
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle Date类型与SQLT_DAT分析
举报原因:
原因补充:

(最多只允许输入30个字)