Oracle to_date、to_timestamp、to_char、to_number 用法

/ Database / 没有评论 / 190浏览
转载请标明出处:
原文首发于:http://www.zhangruibin.com
本文出自RebornChang的博客

在说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🇸🇸ff3') t_3,
  3  to_char(systimestamp, 'yyyy-mm-dd hh24:mi🇸🇸ff6') t_6,
  4  to_char(systimestamp, 'yyyy-mm-dd hh24:mi🇸🇸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还有更多的操作,可以自行寻找资料,这里就不赘述了。

附录

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例子

<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.net.URL[color=red][/color]