OceanBase 支持以下三种时间戳字面量:
TIMESTAMP
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
TIMESTAMP 字面量
TIMESTAMP[(scale)]
数据类型存储了年、月、日、时、分、秒和小数秒值的值。当指定 TIMESTAMP 字面量时,秒字段最大可以指定精度到第9位的纳秒:
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位的纳秒,以下示例使用时区偏移量指定了时区字段的值:
TIMESTAMP '2020-02-25 11:26:18.316 +08:00'
当两个 TIMESTAMP WITH TIME ZONE 字面量中的值表示 GMT 时区的同一时刻,那么尽管它们的时区字段的值不同,它们也被视为相同的字面量。如以下示例所示,GMT-8 时区的早上 8 点和 GMT-5 时区的早上11点其实是同一时刻:
TIMESTAMP '2020-04-25 08:26:18.316 -08:00'
TIMESTAMP '2020-04-25 11:26:18.316 -05:00'
同样的,在字面量中我们可以使用时区区域名称替换时区偏移量,如下所示的示例中将 -08:00 替换为了 America/Los_Angeles:
TIMESTAMP '2020-02-01 11:00:00 America/Los_Angeles'
由于一些地区有夏令时的转换,为了消除夏令时转换时时间的歧义,在指点字面量的值时可以同时使用 时区区域名称(TZR)和相应的缩写 (TZD)以确保字面量的值为夏令时:
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 |
SYSTIMESTAMP | 25-FEB-20 14:28:41.264258 |
TO_TIMESTAMP(‘25-FEB-2020’, ‘DD-MON-YYYY’) | 25-FEB-20 00.00.000000 |
SYSDATE | 25-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 |