OceanBase TIMESTAMP WITH LOCAL TIME ZONE 数据类型
TIMESTAMP [(scale)] WITH LOCAL TIME ZONE
数据类型的时区信息是当前会话发生的时区。与 TIMASTAMP [(scale)] WITH TIME ZONE
的区别在于用户不需要自己输入时区信息,OceanBase 直接存储默认的数据库时区 +00:00 (不可更改)。当用户检索数据时,OceanBase 会返回本地会话时区(可更改)。此数据类型常用于始终在两层应用程序中的客户端系统的时区中显示的日期信息。
语法
TIMASTAMP [(scale)] WITH TIME ZONE
参数
参数 |
取值范围 |
说明 |
---|---|---|
scale |
0~9 |
TIMESTAMP [(scale)] 的阈值和精确度取决于 scale 的值,最大值为 9(纳秒),最小值为 0(秒),默认值为 6。 |
格式
TIMESTAMP WITH LOCAL TIME ZONE
数据类型的默认输入输出格式由 NLS_TIMESTAMP_FORMAT
决定,运行以下 SQL 语句查看日期时间格式:
SELECT @@NLS_TIMESTAMP_FORMAT FROM DUAL;
返回结果:
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。
CREATE TABLE LocalTZ ( ltzcol TIMESTAMP WITH LOCAL TIME ZONE);
INSERT INTO LocalTZ VALUES (TIMESTAMP '2020-02-25 11:10:08.123');
ALTER SESSION SET TIME_ZONE='+08:00';
SELECT SESSIONTIMEZONE, ltzcol FROM LocalTZ;
返回结果:
+-----------------+------------------------------+
| SESSIONTIMEZONE | ltzcol |
+-----------------+------------------------------+
| +08:00 | 25-FEB-20 11:10:08.123000 AM |
+-----------------+------------------------------+
可通过更改自定义参数 TIME_ZONE 的值而改变 SESSIONTIMEZONE:
ALTER SESSION SET TIME_ZONE='+00:00';
SELECT SESSIONTIMEZONE, ltzcol FROM LocalTZ;
返回结果:
+-----------------+------------------------------+
| SESSIONTIMEZONE | ltzcol |
+-----------------+------------------------------+
| +00:00 | 25-FEB-20 03:10:08.123000 AM |
+-----------------+------------------------------+