1.9 KiB
1.9 KiB
旧时间戳和新时间戳
新的TIMESTAMP和TIME语义使类型与SQL标准保持一致。详见以下章节。
注意
新的TIMESTAMP语义仍在试验中。建议保持原有TIMESTAMP语义为启用状态。您可以通过全局配置或基于每个会话配置新的语义来验证新语义。在新版本中,可能会废弃旧版的语义。
配置
可以使用deprecated.legacy-timestamp配置属性启用旧语义。将其设置为true(默认)将启用旧语义,而将其设置为false将启用新语义。
此外,可以通过legacy_timestamp会话属性实现基于会话的语义启用或禁用。
TIMESTAMP语义变化
以前,TIMESTAMP类型描述的是openLooKeng会话时区中的时间实例。现在,openLooKeng将TIMESTAMP值视为一组表示实际时间的字段:
YEAR OF ERAMONTH OF YEARDAY OF MONTHHOUR OF DAYMINUTE OF HOURSECOND OF MINUTE- asDECIMAL(5, 3)
因此,除非明确需要某个时区,例如在转换为TIMESTAMP WITH TIME ZONE 或 TIME WITH TIME ZONE时,TIMESTAMP值不会以任何方式与会话时区链接。在这些情况下,如SQL标准中所约定的,将会使用会话时区的时区偏移量。
TIME语义变化
TIME类型变得与TIMESTAMP类型相似。
TIME with TIME ZONE语义变化
由于兼容性要求,TIME WITH TIME ZONE还不可能与SQL标准完全对齐。因此,在计算TIME WITH TIME ZONE的时区偏移量时,openLooKeng使用会话的开始日期和时间。
在使用TIME WITH TIME ZONE的查询中可以看到,查询的时区已经发生了时区策略更改或使用了夏令时。例如,会话开始时间为2017-03-01:
- 查询:
SELECT TIME '10:00:00 Asia/Kathmandu' AT TIME ZONE 'UTC' - 旧的查询结果:
04:30:00.000 UTC - 新的查询结果:
04:15:00.000 UTC