全部产品
云市场

TIMESTAMP WITH LOCAL TIME ZONE 数据类型

更新时间:2020-03-27 10:57:00

TIMESTAMP [(scale)] WITH LOCAL TIME ZONE 数据类型的时区信息是当前会话发生的时区。与 TIMASTAMP [(scale)] WITH TIME ZONE 的区别在于用户不需要自己输入时区信息,OceanBase 直接存储默认的数据库时区 +00:00 (不可更改)。当用户检索数据时,OceanBase 会返回本地会话时区(可更改)。此数据类型常用于始终在两层应用程序中的客户端系统的时区中显示的日期信息。

语法

  1. TIMASTAMP [(scale)] WITH TIME ZONE

参数

参数 取值范围 说明
scale 0~9 TIMESTAMP [(scale)] 的阈值和精确度取决于 scale 的值,最大值为 9(纳秒),最小值为 0(秒),默认值为 6。

格式

TIMESTAMP WITH LOCAL TIME ZONE 数据类型的默认输入输出格式由 NLS_TIMESTAMP_FORMAT 决定,运行以下 SQL 语句查看日期时间格式:

  1. SELECT @@NLS_TIMESTAMP_FORMAT FROM DUAL;

返回结果:

  1. DD-MON-RR HH.MI.SSXFF AM

如果您需要自定义数据的格式,可以使用转换函数。您可以通过函数 TO_CHAR (datetime,fmt) 指定数据的输出格式。这个转换函数会将字符串转化为参数 fmt 中定义的格式。在 fmt 未指明的情况下 TO_CHAR 按数据类型的默认格式返回数据。关于 TIMESTAMP WITH TIME ZONE 数据类型值的输入格式,您可以参阅文档 时间戳字面量

取值范围

0001-01-01 00:00:00.000000000~9999-12-31 23:59:59.999999999

示例

TIMESTAMP WITH TIME ZONE 数据类型没有专门的字面量为其赋值,时区信息由 SESSIONTIMEZONE 返回本地对话时区。SESSIONTIMEZONE 的值取自自定义参数 TIME_ZONE

  1. CREATE TABLE LocalTZ ( ltzcol TIMESTAMP WITH LOCAL TIME ZONE);
  2. INSERT INTO LocalTZ VALUES (TIMESTAMP '2020-02-25 11:10:08.123');
  3. ALTER SESSION SET TIME_ZONE='+08:00';
  4. SELECT SESSIONTIMEZONE, ltzcol FROM LocalTZ;

返回结果:

  1. +-----------------+------------------------------+
  2. | SESSIONTIMEZONE | ltzcol |
  3. +-----------------+------------------------------+
  4. | +08:00 | 25-FEB-20 11:10:08.123000 AM |
  5. +-----------------+------------------------------+

可通过更改自定义参数 TIME_ZONE 的值而改变 SESSIONTIMEZONE,以下语句使用 TO_CHAR 函数指定输出格式:

  1. ALTER SESSION SET TIME_ZONE='+00:00';
  2. SELECT SESSIONTIMEZONE, TO_CHAR(ltzcol, 'YYYY-MM-DD HH:MI:SSXFF PM TZH:TZM') ltzcol FROM LocalTZ;

返回结果:

  1. +-----------------+--------------------------------------+
  2. | SESSIONTIMEZONE | ltzcol |
  3. +-----------------+---------------------------------------+
  4. | +00:00 | 2020-02-25 03:10:08.123000 AM +00:00 |
  5. +-----------------+---------------------------------------+