Oracle Date与Timestamp类型的使用与区别

1.DATE数据类型
DATE数据类型的问题在于它表示两个事件发生时间间隔的度量粒度是秒。可以使用TO_CHAR函数把DATE类型数据进行格式化输出。

SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') "Date" from dual;
Date
-------------------
2020-10-30 17:24:08

2.TIMESTAMP 数据类型

DATE数据类型的主要问题是它粒度不能足够区别出两个事件哪个先发生。ORACLE已经在DATE数据类型上扩展出来了TIMESTAMP数据类型,包括了小数秒的信息,变得更加细粒度。如果你想把 DATE类型转换成TIMESTAMP类型,就使用CAST函数。

SQL> select cast(sysdate as timestamp) "Date" from dual;

Date
---------------------------------------------------------------------------
30-OCT-20 05.25.45.000000 PM

正如你看到的,在转换后的时间段尾部有了一段“.000000”。这是因为从date转换过来的时候,没有小数秒的信息,缺省为0。而且显示格式是按照参数NLS_TIMESTAMP_FORMAT定的缺省格式显示。当你把一个表中date类型字段的数据移到另一个表的timestamp类型字段中去的时候,oracle会自动为你做转换。

 SELECT TO_CHAR(time1,'YYYY-MM-DD HH24:MI:SS') "Date" FROM date_table 
 Date 
 ------------------- 
 2020-10-30 17:25:08 

TIMESTAMP数据的格式化显示和DATE 数据一样。注意,to_char函数支持date和timestamp,trunc不支持TIMESTAMP数据类型。

 SELECT TO_CHAR(time1,'YYYY-MM-DD HH24:MI:SS:FF3') "Date" FROM date_table
 Date 
 ----------------------- 
 2020-10-30 17:35:11:000 

3.系统日期和时间

为了得到系统时间,返回成date数据类型。你可以使用sysdate函数。

1 SQL> SELECT SYSDATE FROM DUAL;

为了得到系统时间,返回成timestamp数据类型。你可以使用systimpstamp函数。

1 SQL> SELECT SYSTIMESTAMP FROM DUAL;

4.date和timestamp 的区别

date类型是Oracle常用的日期型变量,他的时间间隔是秒。两个日期型相减得到是两个时间的间隔,注意单位是“天”。

select to_date('2022-10-30 03:12:00','yyyy-mm-dd hh24:mi:ss')-sysdate from dual
TO_DATE('2022-10-3003:12:00','YYYY-MM-DDHH24:MI:SS')-SYSDATE
------------------------------------------------------------
                                                  729.402535

timestamp是DATE类型的扩展,可以精确到小数秒。两个timestamp相减的话,不能直接的得到天数,而是得到,多少天,多少小时,多少秒等.

select to_timestamp('2022-10-30 03:12:00','yyyy-mm-dd hh24:mi:ss')-systimestamp from dual
TO_TIMESTAMP('2022-10-3003:12:00','YYYY-MM-DDHH24:MI:SS')-SYSTIMESTAMP
---------------------------------------------------------------------------
+000000729 09:39:08.524019000

5.date和timestamp之间的相互转换

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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值