特定时区的表达方式
可以使用特定时区的表达式来调整时间戳值以及时间戳值的字符串或图形字符串表示,使其符合特定时区。
特定时区表达式的第一个操作数必须是一个返回内置时间戳或内置字符或图形字符串数据类型值的表达式。 如果第一个操作数是字符串或图形字符串,则它不能是CLOB或DBCLOB值,其值必须是一个有效的时间戳的字符串或图形字符串表示形式。 有关日期时间值的字符串表示形式的有效格式,请参阅日期时间值的字符串表示形式。
如果特定时区表达式的第一个操作数返回不带时区的 TIMESTAMP 值,则该表达式在调整到指定时区之前会隐式转换为带时区的 TIMESTAMP。
- AT LOCAL
- 指定使用会话时区特殊寄存器根据本地时区调整时间戳值。
- AT TIME ZONE
- 指定时间戳将根据表达式所代表的时区进行调整。
表达式是一个字符串或图形字符串。 它不能是 CLOB 或 DBCLOB 值,并且其值必须左对齐且采用 '± th : tm ' 格式,其中 th 表示 -12 至 +14 之间的时区小时, tm 表示 0–59 范围内的时区分钟,值范围为 -12:59 至 +14:00。 该值不能为空值。
该表达式返回指定时区中的带有时区的TIMESTAMP。
语法替代 :TIMEZONE可以作为TIME ZONE的替代选项。
示例 1
CAST('2010-04-12-10:30:00.0 -5:00' AT LOCAL AS TIMESTAMP)
返回:2010-04-12-07:30:00.000000。示例 2
将带有时区的时间戳值插入到表 tz 中,并作为带有本地时区的时间戳进行检索,时区为 +08:00,并根据 UTC 进行调整。 假设表tz存在如下:CREATE TABLE tz(tstz TIMESTAMP WITH TIME ZONE);
INSERT INTO tz(tstz) VALUES(TIMESTAMP '2010-01-01-10.23.51-08:00');- 根据当地时间调整tstz列的值:
SELECT tstz AT LOCAL FROM tz; - 检索tstz列的值,并根据时区+08:00进行调整:
SELECT tstz AT TIME ZONE '+08:00' FROM tz; - 检索UTC调整后的tstz列的值:
SELECT tstz AT TIME ZONE '+0:00' FROM tz;
