关于oracle的timestamp类型的一点理解

本文探讨了数据库中的Date和Timestamp两种日期类型的区别。Date支持直接进行加减运算,并且Timestamp提供了更精确的时间戳记录,包括秒后的九位小数。文章还介绍了如何通过代码计算两个Timestamp之间的差异。

      一些同事在平常的工作中因为date和timestamp而苦恼,我觉得这两个数据类型都是关于日期的,但是有些运算还是有些不同的。date类型可以直接加减数字运算,比如:select sysdate, sysdate+ 1.2 from dual; 这个函数的意思是将现在的时间加上1.2 天,即:1天零4小时又48分钟,因此得到的结果是:sysdate: 2010-11-9 16:06:20   sysdate+1.2:2010-11-10 20:54:20。 timestamp类型比date类型更加精确了,它在秒后面又加了9位小数,即:select to_timestamp('20100908','yyyymmdd')  now  from dual; 结果是:08-9月 -10 12.00.00.000000000 上午。当直接加减数字时就转换为了date类型,即:to_timestamp('20100908','yyyymmdd')+1.2 得到的结果是:2010-9-9 12:00:00。

     两个timestamp类型相减得到的结果地格式:day hours:minutes:seconds.000000000,即结果能够真实反映出相差多少天零多少小时、多少分、多少秒。但是两个date类型相减得到的是“天数”,要想得到相应的天数和时间还得经过运算,这里不再罗嗦了!

   附上一段代码:

 declare
  v_result   varchar2(200);
  v_day      varchar2(20);
  v_time     varchar2(20);
  n_position number;
begin
  v_result   := to_timestamp('20100908 23:59:59', 'yyyymmdd hh24:mi:ss') -
                to_timestamp('20100907 22:58:58', 'yyyymmdd hh24:mi:ss');
  n_position := instr(v_result, ' ', 1, 1);
  v_day  := substr(v_result, 1, n_position - 1);
  v_time := substr(v_result, n_position + 1);
  v_time:=substr(v_time,1,length(v_time)-10);
  dbms_output.put_line('相差:' || abs(to_number(v_day)) || '天又' || v_time);
end;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值