转载请标明出处:
原文首发于: http://www.zhangruibin.com
本文出自 RebornChang的博客
在说to_char,to_date,to_timestamp这些内置函数之前,首先要对数据库日期类型有所认识:
DATE数据类型的问题在于它表示两个事件发生时间间隔的度量粒度是秒。
ORACLE已经在DATE数据类型上扩展出来了TIMESTAMP数据类型,它包括了所有DATE数据类型的年月日时分秒的信息,而且包括了小数秒的信息。如果你想把 DATE类型转换成TIMESTAMP类型,就使用CAST函数。
SQL> SELECT CAST(date1 AS TIMESTAMP) "Date" FROM t;
1.date类型是Oracle常用的日期型变量,他的时间间隔是秒。两个日期型相减得到是两个时间的间隔,注意单位是“天”。
2.timestamp是DATE类型的扩展,可以精确到小数秒(fractional_seconds_precision),可以是0 to9,缺省是6。两个timestamp相减的话,不能直接的得到天数,而是得到,多少天,多少小时,多少秒等。
to_char来转换timestamp——>date:
select to_date(to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual;
date ——>timestamp:
select to_timestamp(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual;
在创建数据库的时候我们经常看到,timestamp(3)这样的列格式,那么timestamp这个参数3是什么意思呢,有没有其他的参数可选?接下来就稍微说下:
众所周知,常见时间单位有:世纪,年,月,周,日,时,分,秒(说光年的去二次元玩),那么比秒还小的时间计量单位是什么呢?毫秒(ms),微秒(us),纳秒(ns),皮秒(ps),飞秒(fs)。 最小的是一飞秒,是10的负15次方秒,即千万亿分之一秒,光在真空中,一飞秒仅走0.3微米。
说上面那些跟timestamp有什么关联?那就说下关联:timestamp(3)在数据库中的存储类比2015-07-28 12:46:45:759,分别是:年-月-日 时:分:秒:毫秒;那前面是参数是6,精度为微秒。参数为9,精度为纳秒。
ps:传说oracle数据库的timestamp的存储精度为6位,即微秒级,所以纳秒级的存储母鸡啦,有兴趣的可以将存储过程解密下看看…
在数据库取按照指定的精度取值的话,sql如下:
SQL> select
2 to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss:ff3') t_3,
3 to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss:ff6') t_6,
4 to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss:ff9') t_9
5 from dual;
T_3:2016-07-28 12:46:45:759
T_6:2016-07-28 12:46:45:759492
T_9:2016-07-28 12:46:45:759492000
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual;
select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual ;
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual ;
具体的用法,参考TO_CHAR
select to_timestamp('2016-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')-systimestamp from dual;
To_number(varchar2 or char,’format model’)
具体的to_number还有更多的操作,可以自行寻找资料,这里就不赘述了。
mybatis常用的jdbcType类型,摘自网络:http://ysj5125094.iteye.com/blog/2185024/
MyBatis 通过包含的jdbcType类型
BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED
TINYINT REAL VARCHAR BINARY BLOB NVARCHAR
SMALLINT DOUBLE LONGVARCHAR VARBINARY CLOB NCHAR
INTEGER NUMERIC DATE LONGVARBINARY BOOLEAN NCLOB
BIGINT DECIMAL TIME NULL CURSOR
Mybatis中javaType和jdbcType对应和CRUD例子
Mybatis中javaType和jdbcType对应关系
JDBC Type Java Type
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT boolean
BOOLEAN boolean
TINYINT byte
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT double
DOUBLE double
BINARY byte[]
VARBINARY byte[]
LONGVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
CLOB Clob
BLOB Blob
ARRAY Array
DISTINCT mapping of underlying type
STRUCT Struct
REF Ref
DATALINK java.net.URL[color=red][/color]