Oracleto_date、to_timestamp、to_char、to_number⽤法
转载请标明出处:
原⽂⾸发于:
本⽂出⾃
厚颜打⼴告,博主个⼈博客地址,欢迎来访
bigdecimal转换为integer在说to_char,to_date,to_timestamp这些内置函数之前,⾸先要对数据库⽇期类型有所认识:
date和timestamp
date
DATE数据类型的问题在于它表⽰两个事件发⽣时间间隔的度量粒度是秒。
timpstamp
ORACLE已经在DATE数据类型上扩展出来了TIMESTAMP数据类型,它包括了所有DATE数据类型的年
⽉⽇时分秒的信息,⽽且包括了⼩数秒的信息。如果你想把 DATE类型转换成TIMESTAMP类型,就使⽤CAST函数。
SQL> SELECT CAST(date1 AS TIMESTAMP) "Date" FROM t;
date和timestamp 的区别
1.date类型是Oracle常⽤的⽇期型变量,他的时间间隔是秒。两个⽇期型相减得到是两个时间的间隔,注意单位是“天”。
2.timestamp是DATE类型的扩展,可以精确到⼩数秒(fractional_seconds_precision),可以是0 to9,缺省是6。两个timestamp相减的话,不能直接的得到天数,⽽是得到,多少天,多少⼩时,多少秒等。
date和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(n),n=0-9
在创建数据库的时候我们经常看到,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
to_char()
数据库中⽇期到sql结果集操作
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 ;
to_date()
sql中的字符到数据库中的⽇期的操作
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual ;
具体的⽤法,参考TO_CHAR
to_timestamp()
sql中的字符到数据库中的时间戳的操作
select to_timestamp('2016-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')-systimestamp from dual;
to_number()
数据库中数字类型字符串到sql结果集转化为number类型的操作
To_number(varchar2 or char,’format model’)
具体的to_number还有更多的操作,可以⾃⾏寻资料,这⾥就不赘述了。
附录
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例⼦
<resultMap type="java.util.Map" id="resultjcm">
<result property="FLD_NUMBER" column="FLD_NUMBER" javaType="double" jdbcType="NUMERIC"/>
<result property="FLD_VARCHAR" column="FLD_VARCHAR" javaType="string" jdbcType="VARCHAR"/>
<result property="FLD_DATE" column="FLD_DATE" javaType="java.sql.Date" jdbcType="DATE"/>
<result property="FLD_INTEGER" column="FLD_INTEGER" javaType="int" jdbcType="INTEGER"/>
<result property="FLD_DOUBLE" column="FLD_DOUBLE" javaType="double" jdbcType="DOUBLE"/>
<result property="FLD_LONG" column="FLD_LONG" javaType="long" jdbcType="INTEGER"/>
<result property="FLD_CHAR" column="FLD_CHAR" javaType="string" jdbcType="CHAR"/>
<result property="FLD_BLOB" column="FLD_BLOB" javaType="[B" jdbcType="BLOB" />
<result property="FLD_CLOB" column="FLD_CLOB" javaType="string" jdbcType="CLOB"/>
<result property="FLD_FLOAT" column="FLD_FLOAT" javaType="float" jdbcType="FLOAT"/>
<result property="FLD_TIMESTAMP" column="FLD_TIMESTAMP" javaType="java.sql.Timestamp" jdbcType="TIMESTAMP"/> </resultMap>
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.URL[color=red][/color]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论