PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Presto SQL:Das Ändern von Zeitzonen mithilfe der Zeitzonenzeichenfolge, die als Ergebnis einer Abfrage kommt, funktioniert nicht

AT TIME ZONE akzeptiert nur Literal oder Intervall.

Presto 320 fügt with_timezone hinzu (für timestamp Werte) at_timezone (für timestamp with time zone Werte) genau für diesen Zweck.

Wenn Sie eine ältere Presto-Version verwenden (z. B. Athena zum Zeitpunkt dieses Schreibens), können Sie die folgende Problemumgehung verwenden. Sie können Ihren Zeitstempelwert in ein varchar umwandeln , mit zone verketten und in timestamp with time zone umwandeln .

presto> select cast(cast(t as varchar) || ' ' || zone as timestamp with time zone)
  from (values (timestamp '2017-06-01 12:34:56.789', 'US/Pacific')) x(t, zone);
                    _col0
---------------------------------------------
 2017-06-01 12:34:56.789 America/Los_Angeles
(1 row)

(Hinweis:Getestet auf Presto 320. Wenn dies auf Athena noch nicht funktioniert, lassen Sie es mich wissen.)