OceanBase 支持以下三种时间戳字面量:

  • TIMESTAMP
  • TIMESTAMP WITH TIME ZONE
  • TIMESTAMP WITH LOCAL TIME ZONE

TIMESTAMP 字面量

TIMESTAMP[(scale)] 数据类型存储了年、月、日、时、分、秒和小数秒值的值。当指定 TIMESTAMP 字面量时,秒字段最大可以指定精度到第9位的纳秒:

  1. TIMESTAMP '2020-02-25 11:26:18.316'

TIMESTAMP WITH TIME ZONE 字面量

TIMESTAMP WITH TIME ZONE 字面量是包含时区信息的时间戳字面量。

TIMESTAMP [(scale)] WITH TIME ZONE 数据类型是 TIMESTAMP[(scale)] 数据类型的一种变体,它在TIMESTAMP[(scale)] 数据类型的基础上还存储 时区偏移量或者时区区域名称 等信息。在指定 TIMESTAMP WITH TIME ZONE 字面量时,需要指定时区信息并且秒字段最大可以指定精度到第9位的纳秒,以下示例使用时区偏移量指定了时区字段的值:

  1. TIMESTAMP '2020-02-25 11:26:18.316 +08:00'

当两个 TIMESTAMP WITH TIME ZONE 字面量中的值表示 GMT 时区的同一时刻,那么尽管它们的时区字段的值不同,它们也被视为相同的字面量。如以下示例所示,GMT-8 时区的早上 8 点和 GMT-5 时区的早上11点其实是同一时刻:

  1. TIMESTAMP '2020-04-25 08:26:18.316 -08:00'
  2. TIMESTAMP '2020-04-25 11:26:18.316 -05:00'

同样的,在字面量中我们可以使用时区区域名称替换时区偏移量,如下所示的示例中将 -08:00 替换为了 America/Los_Angeles

  1. TIMESTAMP '2020-02-01 11:00:00 America/Los_Angeles'

由于一些地区有 夏令时 的转换,为了消除夏令时转换时时间的歧义,在指点字面量的值时可以同时使用 时区区域名称(TZR)和相应的缩写 (TZD)以确保字面量的值为夏令时:

  1. TIMESTAMP '2020-06-01 11:00:00 America/Los_Angeles PDT'

TIMESTAMP WITH LOCAL TIME ZONE 字面量

TIMESTAMP [(scale)] WITH LOCAL TIME ZONE 数据类型是包含本地时区信息的数据类型。OceanBase 中并没有专门的 TIMESTAMP WITH LOCAL TIME ZONE 字面量,是通过其他有效的日期时间字面量来为TIMESTAMP [(scale)] WITH LOCAL TIME ZONE 数据类型赋值的。下表显示了一些可用于将值插入 TIMESTAMP WITH LOCAL TIME ZONE 列的格式,以及查询返回的相应值:

INSERT 语句中指定的值查询返回的值
‘25-FEB-20’25-FEB-20 00.00.000000
SYSTIMESTAMP25-FEB-20 14:28:41.264258
TO_TIMESTAMP(‘25-FEB-2020’, ‘DD-MON-YYYY’)25-FEB-20 00.00.000000
SYSDATE25-FEB-20 02.55.29.000000 PM
TO_DATE(‘25-FEB-20’, ‘DD-MON-YYYY’)25-FEB-20 12.00.00.000000 AM
TIMESTAMP’2020-02-25 8:00:00  America/Los_Angeles’25-FEB-20 08.00.00.000000 AM