我想知道如何在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 值,出于显示目的而偏移。 我一般不建议这样做。 但是,当本地时间被移动到数据库中的"带有时区的时间戳"值时,我不得不执行类似的操作 - 但时区错误。