一、oracle 时间类型的简介
测试表:
create table dataTest(
date1 Date,
timestamp1 Timestamp);
测试1:
插入一条数据:
insert into dataTest values(to_date('2017-01-01','yyyy-mm-dd'),to_date('2018-02-02','yyyy-mm-dd'));
查询结果:
测试2:
插入一条数据:
insert into dataTest values(to_date('2017-01-01 11:11:11','yyyy-mm-dd hh24:mi:ss'),to_date('2018-02-02 11:11:11','yyyy-mm-dd hh24:mi:ss'));
查询结果:date类型存储数据的格式为年月日时分秒,可以精确到秒
timestamp类型存储数据的格式为年月日时分秒,可以精确到纳秒(9位)
timestamp可以存储数据最大精度为纳秒(9),但默认存储的精度为微秒(6)
Oracle定义语法:TIMESTAMP [(precision)] precision 的范围为0到9, 默认为6. 默认的可以写作timestamp或者timestamp(6)
-- 建表包含timestamp类型.
SQL> create table tb__order(create_time timestamp);
SQL> insert into tb__order values(TO_TIMESTAMP('2006-12-01 12:12:09.123456789', 'YYYY-MM-DD HH24:MI:SS.FF'));
创建表时没有指定timestamp的精度范围,所以默认是6,添加数据时FF就是精度范围,而添加的数据是9位,那么存储数据时会四舍五入存储到6位,
所以存储结果是'2006-12-01 12:12:09.123457'
如果想使用更高的精确度就需要建表时指定了. (一般用不到)
SQL> create table tb__order(create_time timestamp(9));
从上面可以终结出。如果我们要求的时间精度只到秒级,两种类型都是满足要求的。
二、mybatis中date类型无法获取时分秒
我们无法获取时分秒的原因不在oracle,主要是我们的程序问题。
出现这种情况有两种可能,1、程序在读取时间的时候丢掉了是否秒。2、程序在写入时间的时候丢掉了时分秒,
1.读取时间是否会丢掉时分秒
插入一条数据:
insert into datatest(date1,TIMESTAMP1) values(TO_date('2017-01-10 01:01:01','yyyy-mm-dd hh24:mi:ss'),TO_date('2017-01-10 01:01:01','yyyy-mm-dd hh24:mi:ss'));