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



我想知道如何在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/的 prestosql。

根据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

嗯。 . .一种蛮力方法是转换为字符串,然后返回时间戳:

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

请注意,这会更改列中值的含义。 带有时区的时间戳实际上是一个 UTC 值,出于显示目的而偏移。 我一般不建议这样做。 但是,当本地时间被移动到数据库中的"带有时区的时间戳"值时,我不得不执行类似的操作 - 但时区错误。

相关内容

  • 没有找到相关文章

最新更新