PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Presto SQL :la modification des fuseaux horaires à l'aide de la chaîne de fuseau horaire résultant d'une requête ne fonctionne pas

AT TIME ZONE n'accepte que le littéral ou l'intervalle.

Presto 320 ajoute with_timezone (pour timestamp valeurs) at_timezone (pour timestamp with time zone valeurs) exactement dans ce but.

Si vous utilisez une ancienne version de Presto (comme Athena au moment de la rédaction de cet article), vous pouvez utiliser la solution de contournement suivante. Vous pouvez convertir votre valeur d'horodatage en un varchar , concaténer avec zone et convertir en timestamp with time zone .

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)

(Remarque :testé sur Presto 320. Si cela ne fonctionne pas encore sur Athena, faites-le moi savoir.)