Oracle基本数据类型存储格式浅析(三)——日期类型
下面通过一个例子进行说明
SQL> create table test_date (date_col date);
表已创建
SQL> insert into test_date values (to_date( :: yyyymmdd hh:mi:ss));
已创建 行
SQL> insert into test_date values (to_date( :: yyyymmdd hh:mi:ss));
已创建 行
SQL> insert into test_date values (to_date( :: syyyymmdd hh:mi:ss));
已创建 行
SQL> insert into test_date values (to_date( :: syyyymmdd hh:mi:ss));
已创建 行
SQL> insert into test_date values (to_date( :: syyyymmdd hh:mi:ss));
已创建 行
SQL> insert into test_date values (to_date( :: syyyymmdd hh:mi:ss));
已创建 行
SQL> insert into test_date values (sysdate);
已创建 行
SQL> insert into test_date values (to_date( :: syyyymmdd hh:mi:ss));
insert into test_date values (to_date( :: syyyymmdd hh:mi:ss))
*
ERROR 位于第 行:
ORA: (全)年度值必须介于 和 + 之间且不为
SQL> insert into test_date values (to_date( :: yyyymmdd hh:mi:ss));
insert into test_date values (to_date( :: yyyymmdd hh:mi:ss))
*
ERROR 位于第 行:
ORA: (全)年度值必须介于 和 + 之间且不为
SQL> col dump_date format a
SQL> select to_char(date_col syyyymmdd hh:mi:ss) dump(date_col) dump_date from test_date;
TO_CHAR(DATE_COLSY DUMP_DATE
:: Typ= Len=:
:: Typ= Len=:
:: Typ= Len=:
:: Typ= Len=:
:: Typ= Len=:
:: Typ= Len=:
:: Typ= Len=:
已选择行
通过最后两条语句已经可以看出Oracle的DATE类型的取值范围是公元前年月日至公元年月日而且根据日期的特定要不然是公元年要不然是公元前年不会出现年的情况
日期类型长度是个字节分别表示世纪年月日时分和秒
由于不会出现的情况月和日都是按照原值存储的月的范围是~日的范围是~
由于时分秒都会出现的情况因此存储时采用原值加的方式时保存为时保存为时保存为分和秒的情况与小时类似小时的范围是~在数据库中以~保存分和秒的范围都是~在数据库中以~保存
年和世纪的情况相对比较复杂可分为公元前和公元后两种情况由于最小的世纪的值是(公元前年)最大值是(公元年)为了避免负数的产生oracle把世纪加保存在数据库中公元年世纪保存为公元年世纪保存为公元前年世纪保存为(+())公元前年世纪保存为(+())
注意对于公元前年虽然已经是公元前了但是表示世纪的前两位的值仍然是因此这时的保存的世纪的值仍然是世纪的范围是~保存的值是~
年的保存与世纪的保存方式类似也把年的值加上进行保存对于公元年年保持为公元年保存为公元年保存为公元年保存为公元前年保存为(+())公元前年保存为(+())公元前年保存为(+())对于公元前的年保存的值总是小于等于对于公元后的年保存的值总是大于等于年的范围是~保存的值是~
注意一般的世纪都包含了年而对于世纪由于包含公元前和公元后两部分且不包含年因此包含了年