`

Oracle数据类型------(日期类型一)

阅读更多
日期的组成部分为:世纪、年度、月度、天、时、分、秒。世纪又分为:公元前、公元后。所以只需存储这7部分,即可。



create table TEST_DATE
(
  DATE_COL DATE
);

SQL> insert into test_date values (to_date('2000-1-1 0:0:0', 'yyyy-mm-dd hh24:mi:ss'));


已创建 1 行。


SQL> insert into test_date values (to_date('1-1-1 0:0:0', 'yyyy-mm-dd hh24:mi:ss'));


已创建 1 行。


SQL> insert into test_date values (to_date('-1-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'));


已创建 1 行。


SQL> insert into test_date values (to_date('-101-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'));


已创建 1 行。


SQL> insert into test_date values (to_date('-4712-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'));


已创建 1 行。


SQL> insert into test_date values (to_date('9999-12-31 23:59:59', 'syyyy-mm-dd hh24:mi:ss'));


已创建 1 行。
SQL> insert into test_date values (to_date('-4713-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'));
insert into test_date values (to_date('-4713-1-1 0:0:0', 'syyyy-mm-dd hh24:mi:ss'))
                                      *
ERROR 位于第 1 行:
ORA-01841: (全)年度值必须介于 -4713 和 +9999 之间,且不为 0



SQL> insert into test_date values (to_date('0000-1-1 0:0:0', 'yyyy-mm-dd hh24:mi:ss'));
insert into test_date values (to_date('0000-1-1 0:0:0', 'yyyy-mm-dd hh24:mi:ss'))
                                      *
ERROR 位于第 1 行:
ORA-01841: (全)年度值必须介于 -4713 和 +9999 之间,且不为 0

SQL> select to_char(date_col, 'syyyy-mm-dd hh24:mi:ss'), dump(date_col) dump_date from test_date;


TO_CHAR(DATE_COL,'SY DUMP_DATE
-------------------- ---------------------------------------
2000-01-01 00:00:00 Typ=12 Len=7: 120,100,1,1,1,1,1
0001-01-01 00:00:00 Typ=12 Len=7: 100,101,1,1,1,1,1
-0001-01-01 00:00:00 Typ=12 Len=7: 100,99,1,1,1,1,1
-0101-01-01 00:00:00 Typ=12 Len=7: 99,99,1,1,1,1,1
-4712-01-01 00:00:00 Typ=12 Len=7: 53,88,1,1,1,1,1
9999-12-31 23:59:59 Typ=12 Len=7: 199,199,12,31,24,60,60
2004-12-15 13:56:19 Typ=12 Len=7: 120,104,12,15,14,57,20

由于不会出现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))。

年的保存与世纪的保存方式类似,也把年的值加上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。

分享到:
评论

相关推荐

    oracle日期时间数据类型与时间间隔数据类型讲解

    对oracle date,timestamp,interval数据类型的详细讲解。

    Oracle 数据类型

    5、DATE数据类型,使用7个字节固定长度,每个字节分别存储世纪,年,月,日 ,时,分,秒,ORACLE中SYSDATE函数的功能是返回当前的日期和时间 6、TIMESTAMP数据类型,和DATE相似,但是这个类型的秒精确到小数点后6...

    Oracle基本数据类型存储格式浅析

    Oracle基本数据类型存储格式浅析(一)——字符类型 Oracle基本数据类型存储格式浅析(二)——数字类型 Oracle基本数据类型存储格式浅析(三)——日期类型 Oracle基本数据类型存储格式浅析(四)——ROWID类型 ...

    Oracle中trunc()函数用法处理日期、数字类型数据

    Oracle中trunc()函数用法处理日期、数字类型数据

    oracle支持的数据类型

    常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 ...数据类型 参数 描述 char(n) n=1 to 2000字节 定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)

    oracle(数据类型函数).

    里面有详细的oracle函数 1、Oracle数据类型 2、Oracle函数分为单行函数和多行函数两大类(sql_function) 单行函数分类 字符函数 数值函数 日期函数 转换函数 通用函数 函数嵌套 分组函数:集合操作符(了解) 实现...

    Oracle和DB2的数据类型比较

    Oracle中的DATE含有年、月、日、时、分、秒,它和DB2/400中的DATE不相互对应,DB2/400中的DATE只有年、月、日,TIME类型含有时、分、秒,因此日期和时间类型要进行转换

    oracle函数大全.doc

    ORACLE函数大全 _______________________________________...将ROWID数据类型转换为字符类型 47.TO_CHAR(date,'format') SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual; TO_CHAR(SYSDATE,'YY -----...

    oracle10g教程从入门到精通.doc

    四:oracle表的管理(数据类型,表创建删除,数据CRUD操作) 9 oracle支持的数据类型 10 字符类 10 数字型 10 日期类型 10 建表 10 修改表 11 删除表 11 添加数据 11 修改数据 12 删除数据 12 savepoint a; --创建保存...

    oracle常用数据类型说明

    类型 含义 存储描述 备注 CHAR 固定长度字符串 最大长度2000bytes   VARCHAR2 可变长度的字符串, 最大长度4000bytes 可做索引的最大长度749 NCHAR 根据字符集而定的固定长度字符串 最大长度2000bytes   ...

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    Oracle 11g中支持的数据类型 数据库定义语言(DDL) 约束的使用 数据操纵语言(DML) 第5章-利用SELECT检索数据 SQL-数据库沟通的语言标准 Oracle 11g中支持的数据类型 数据库定义语言(DDL) 约束的使用 ...

    Oracle-数据库简答题.doc

    Oracle数据库有一个或多个物理的数据文件。数据库的数据文件包含全部数据库数据 。逻辑数据物理地存储在数据文件中。 每个数据库有两个或多个日志文件组,日志文件组用于收集数据库日志。日志的主要 功能是记录对...

    MYSQL,SQLSERVER,ORACLE常用的函数

    给出日期date和星期x之后计算下一个星期的日期 SQL> select next_day('18-5月-2001','星期五') next_day from dual; NEXT_DAY ---------- 25-5月 -01 41.SYSDATE 用来得到系统的当前日期 SQL> select to_...

    实验十九-Oracle数据库系统开发实例-学生成绩管理系统.doc

    "列名 "数据类型 "非空 "说明 " "学号 "char(10) " "主键 " "姓名 "char(10) " " " "性别 "char(2) " "性别,只能取"男"或"女" " "出生日期 "date " " " "班号 "char(10) " " " 表19-4 teacher表的结构 ...

    oracle导出时间格式转换

    大家都知道,从oracle数据库中导出数据时,如果其中有字段类型为date,那么导出时将会变成to_date('29-...本程序实现了将oracle数据导出文件中的to_date('x','y')转换成'x'的功能,并去掉了一些非SQL语句,如prompt...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

    5.1.1 Oracle数据存储模型 140 5.1.2 段、区间、块和行 142 5.1.3 文件存储技术 144 5.2 创建和管理表空间 146 5.2.1 创建表空间 146 5.2.2 更改表空间 150 5.2.3 删除表空间 154 5.2.4 OMF 154 5.3 管理表...

Global site tag (gtag.js) - Google Analytics