presto—如何将带时区的时间戳转换为时间戳,但在sql中保留本地时间

k3bvogb1  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(2121)

我想知道如何在sql中进行这种转换。 2020-07-03 19:47:51.494 America/Los_Angeles => 2020-07-03 19:47:51.494 注意输入数据类型 TIMESTAMP WITH TIMEZONE 输出类型为 TIMESTAMP .
特别是,我使用的是来自https://prestosql.io/.

fnvucqvd

fnvucqvd1#

嗯。暴力方式是转换为字符串,然后再转换回时间戳:

date_parse(format_datetime(datecol, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d %H:%i:%s')

请注意,这会更改列中值的含义。带时区的时间戳实际上是一个utc值,为显示目的而偏移。我一般不建议这样做。但是,当本地时间被移到数据库中的“timestamp with timezone”值中时,我不得不做类似的操作——但是在错误的时区中。

1tuwyuhd

1tuwyuhd2#

按照sql标准, CAST 我应该这么做。在presto中,在默认设置下,今天不是这样。这是由https://github.com/prestosql/presto/issues/37
但是,您可以使用会话切换来解锁sql标准行为

presto> SET SESSION legacy_timestamp = false;
SET SESSION

presto> SELECT CAST(TIMESTAMP '2020-07-03 19:47:51.494 America/Los_Angeles' AS timestamp);
          _col0
-------------------------
 2020-07-03 19:47:51.494

相关问题