Dies wird im Handbuch , aber es ist nicht immer offensichtlich, wie man tatsächlich mit Daten/Zeiten arbeitet. Die SQL-Spezifikation ist etwas bizarr.
Im Fall Ihrer Frage ist nicht klar, ob Sie die Uhrzeit in UTC speichern, aber in der lokalen Zeit des Servers anzeigen möchten (TimeZone
) oder ob Sie TimeZone
ignorieren möchten und immer als UTC anzeigen. Ich nehme letzteres an.
Für Zeitstempel verwenden Sie einfach AT TIME ZONE
zweimal, wie:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Sie müssen AT TIME ZONE
verwenden zweimal. Einmal, um den eingegebenen timestamp
umzuwandeln zu timestamptz
entsprechend dem Argument timezone, dann ein weiteres, um das in einen timestamp
umzuwandeln um UTC.
Leider wegen der (IMO verrückten) Art und Weise, wie die SQL-Spezifikation AT TIME ZONE
definiert für TIME
, können Sie dasselbe nicht für TIME
tun . Sie müssen die TimeZone
manipulieren Variable stattdessen:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Damit bleibt immer noch ein timetz
keine time
. Daher ändert sich sein Anzeigewert mit der timezone
Einstellung.