我想知道如何在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/.
2020-07-03 19:47:51.494 America/Los_Angeles
2020-07-03 19:47:51.494
TIMESTAMP WITH TIMEZONE
TIMESTAMP
fnvucqvd1#
嗯。暴力方式是转换为字符串,然后再转换回时间戳:
date_parse(format_datetime(datecol, '%Y-%m-%d %H:%i:%s'), '%Y-%m-%d %H:%i:%s')
请注意,这会更改列中值的含义。带时区的时间戳实际上是一个utc值,为显示目的而偏移。我一般不建议这样做。但是,当本地时间被移到数据库中的“timestamp with timezone”值中时,我不得不做类似的操作——但是在错误的时区中。
1tuwyuhd2#
按照sql标准, CAST 我应该这么做。在presto中,在默认设置下,今天不是这样。这是由https://github.com/prestosql/presto/issues/37但是,您可以使用会话切换来解锁sql标准行为
CAST
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
2条答案
按热度按时间fnvucqvd1#
嗯。暴力方式是转换为字符串,然后再转换回时间戳:
请注意,这会更改列中值的含义。带时区的时间戳实际上是一个utc值,为显示目的而偏移。我一般不建议这样做。但是,当本地时间被移到数据库中的“timestamp with timezone”值中时,我不得不做类似的操作——但是在错误的时区中。
1tuwyuhd2#
按照sql标准,
CAST
我应该这么做。在presto中,在默认设置下,今天不是这样。这是由https://github.com/prestosql/presto/issues/37但是,您可以使用会话切换来解锁sql标准行为