Oracle PL / SQL TIMESTAMP数据类型

数据类型TIMESTAMP存储年,月,日,小时,分钟和秒。

语法是:

TIMESTAMP[(precision) 

其中精度指定秒字段的小数部分中的数字数。

默认值为6。

默认时间戳格式由Oracle初始化参数NLS_TIMESTAMP_FORMAT设置。

 

DECLARE 
  checkout TIMESTAMP(3); 
BEGIN 
  checkout := '22-JUN-2022 07:48:53.275'; 
  DBMS_OUTPUT.PUT_LINE( TO_CHAR(checkout)); 
END; 
/ 

 

实例2

以下代码显示如何使用SCN_TO_TIMESTAMP和TIMESTAMP_TO_SCN函数来操作TIMESTAMP。

DECLARE
  right_now  TIMESTAMP; 
  yesterday  TIMESTAMP; 
  sometime   TIMESTAMP; 
  i_scn1       INTEGER; 
  i_scn2       INTEGER; 
  i_scn3       INTEGER; 
BEGIN 
  right_now := SYSTIMESTAMP; 
  i_scn1 := TIMESTAMP_TO_SCN(right_now); 
  DBMS_OUTPUT.PUT_LINE(i_scn1); 
 
  yesterday := right_now - 1; 
  i_scn2 := TIMESTAMP_TO_SCN(yesterday); 
  DBMS_OUTPUT.PUT_LINE(i_scn2); 
 
  i_scn3 := (i_scn1 + i_scn2) / 2; 
  sometime := SCN_TO_TIMESTAMP(i_scn3); 
  DBMS_OUTPUT.PUT_LINE (i_scn3);
  DBMS_OUTPUT.PUT_LINE (sometime); 
END; 
/ 

 

TIMESTAMP WITH TIME ZONE数据类型

TIMESTAMP WITH TIME ZONE包含时区位移。

时区位移是本地时间和协调世界时间(UTC)之间的格林威治标准时间(GMT)之间的差。

语法是:

TIMESTAMP[(precision)] WITH TIME ZONE 

precision指定秒字段的小数部分中的数字位数,范围为0..9。

默认值为6。

具有时区格式的默认时间戳由Oracle初始化参数NLS_TIMESTAMP_TZ_FORMAT设置。

以下代码显示如何将Literal分配给TIMESTAMP WITH TIME ZONE变量。

DECLARE 
  logoff TIMESTAMP(3) WITH TIME ZONE; 
BEGIN 
  logoff := '10-OCT-2004 09:42:37.114 AM +02:00'; 
  DBMS_OUTPUT.PUT_LINE (TO_CHAR(logoff)); 
END; 
/ 

例如,以下文字都表示相同的时间。

TIMESTAMP '15-APR-2014 8:00:00 -8:00' 
TIMESTAMP '15-APR-2014 8:00:00 US/Pacific' 
TIMESTAMP '31-OCT-2014 01:30:00 US/Pacific PDT' 

时区的可用名称位于静态数据字典视图V $ TIMEZONE_NAMES的TIMEZONE_REGION和TIMEZONE_ABBR列中。

 

具有本地时区的TIMESTAMP数据类型

TIMESTAMP WITH LOCAL TIME ZONE包括时区位移。

时区位移是本地时间和协调世界时间之间的差。

我们可以使用命名的时区,如TIMESTAMP WITH TIME ZONE一样。

语法是:

TIMESTAMP[(precision)] WITH LOCAL TIME ZONE 

precision指定秒字段的小数部分中的位数。

将值插入数据库列时,该值将归一化为数据库时区,并且时区位移不会存储在列中。

当您检索该值时,Oracle会在您的本地会话时区中返回该值。

以下代码显示如何使用LOCAL TIME ZONE分配给TIMESTAMP。

DECLARE 
  logoff  TIMESTAMP(3) WITH LOCAL TIME ZONE; 
BEGIN 
  logoff := '10-OCT-2014 10:42:37.111 AM '; 
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(logoff)); 
END; 
/