Oracle中的TIMESTAMP数据类型

timestamp格式表示的时间如何转换成普通格式:

SQL>   SELECT   to_char(tp,'dd-mm-yyyy   hh24:mi:ss.ff')   FROM   TIMESTAMPTEST;

 

///

 

java.sql.Timestamp 和 java.sql.Date互相转换:

 

java.sql.Date--->java.sql.Timestamp
new java.sql.Timestamp(yourDate.getTime());

java.sql.Timestamp-->java.sql.Date
new java.sql.Date(yourTimestamp.getTime());

界面要显示毫秒的话,在date传到前面时转化格式即可! 

 

///

 

TIMESTAMP 数据类型,是DATE的扩展,可以存储年、月、日、小时 、分钟、秒,同时还可以存储秒的小数部分。

语法为:TIMESTAMP [(fractional_seconds_precision)]

fractional_seconds_precision为可选项,指定秒的小数部分的精度,取值范围为0-9,默认值为6。

示例代码:

declare
v_inteval timestamp (7);
begin
v_inteval := TIMESTAMP '2007-05-05 23:34:45.1234567';                  
dbms_output.put_line(v_inteval);
end;

结果为:05-5月 -07 11.34.45.1234567 下午。

说明:如果精度为5,则结果为05-5月 -07 11.34.45.12346 下午;如果精度为8,则结果为05-5月 -07 11.34.45.12345670 下午。

二、TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE数据类型是可以指定时区的TIMESTAMP 。时区的偏移是指本地时间和格林尼治(UTC)时间之间的差异(小时 和分钟)。

语法为:TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

fractional_seconds_precision为可选项,指定秒的小数部分的精度,取值范围为0-9,默认值为6。

如果2个TIMESTAMP WITH TIME ZONE,相对于UTC代表相同的时间,则认为这2个TIMESTAMP WITH TIME ZONE是相等的,而不管这2个TIMESTAMP WITH TIME ZONE所代表的具体时间,例如:TIMESTAMP '1999-04-15 8:00:00 -8:00'和TIMESTAMP '1999-04-15 11:00:00 -5:00'是相等的,虽然他们分别表示当地的8点和11点,其中-8:00以及-5:00,表示相对UTC的偏移量。

在上例中,也可以将偏移量替换成时区地区(TRZ,time zone region),例如,上例中的TIMESTAMP '1999-04-15 8:00:00 -8:00',与TIMESTAMP '1999-04-15 8:00:00 US/Pacific'是相等的。

为了削除因为夏令时引起的时间歧义,同时使用TRZ,以及和TRZ相对应的TRD来确保返回正确的时间,例如:TIMESTAMP '1999-10-29 01:30:00 US/Pacific PDT'。如果没有使用TZD元素,并且ORACLE 的ERROR_ON_OVERLAP_TIME session参数设置为TRUE,则ORACLE 会返回错误。如果ERROR_ON_OVERLAP_TIME session参数设置为FALSE,则ORACLE 认为该TIMESTAMP WITH TIME ZONE为标准时间。

代码一:

declare
v_inteval timestamp (7) with time zone;
begin
v_inteval := TIMESTAMP '2007-05-05 23:34:45.1234567';                  
dbms_output.put_line(v_inteval);
end;

结果为:05-5月 -07 11.34.45.123456700 下午 +08:00。

说明:该结果与(一)中的代码结果相比,多了一个时区偏移量+08:00,说明该时间为北京时间。

代码二:

declare
v_inteval_1 timestamp (3) with time zone;

  v_inteval_2 timestamp (3) with time zone;
begin
v_inteval_1 := TIMESTAMP '1999-04-15 8:00:00 -8:00';
  v_inteval_2 := TIMESTAMP '1999-04-15 11:00:00 -5:00';
  if(v_inteval_1=v_inteval_2)  then            
  dbms_output.put_line('v_inteval_1=v_inteval_2');
  else
   dbms_output.put_line('v_inteval_1!=v_inteval_2');
  end if;
end;

结果为:v_inteval_1=v_inteval_2。

三、TIMESTAMP WITH  LOCAL TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE数据类型也是可以指定时区的TIMESTAMP ,和TIMESTAMP WITH TIME ZONE不同的是,他存储的是数据库的时区,时区偏移量并不存储。当用户提交数据,ORACLE 返回的是用户的本地所在的时区。时区的偏移是指本地时间和格林尼治(UTC)时间之间的差异(小时 和分钟)。TIMESTAMP WITH LOCAL TIME ZONE主要用于CS二层系统应用。

语法:TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

以上代码的运行环境:oracle9.2,pl/sql developer

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值