首页 > 解决方案 > SQL date_part 返回本地时区而不是参数中的时区

问题描述

SELECT date_part('timezone_hour', '2019-12-01 13:37:12 PST'::timestamptz) AS "tz"

SELECT date_part('timezone_hour', '2019-12-01 13:37:12 EST'::timestamptz) AS "tz"

两者都返回-8,我的本地太平洋时间 GTM 偏移量以小时为单位,而不是函数参数中的时区。

提取发生相同的行为:

SELECT extract('timezone_hour' from '2019-12-01 13:37:12 PST'::timestamptz) AS "year"

SELECT extract('timezone_hour' from '2019-12-01 13:37:12 PST'::timestamptz) AS "year"

两者都返回-8

为什么我没有得到我为时间戳指定的时区偏移量?

标签: sqlpostgresql

解决方案


试试这些:

SELECT date_part('hour', '2019-12-01 13:37:12'::timestamp AT TIME ZONE 'PST') AS "tz";
SELECT date_part('hour', '2019-12-01 13:37:12'::timestamp AT TIME ZONE 'EST') AS "tz";
SELECT date_part('hour', '2019-12-01 13:37:12'::timestamp AT TIME ZONE 'AEST') AS "tz";

这些在rextester (postgres)分别返回 22、19 和 4

在您现有的方法中,如果您拉出“timezone_hour”,它将是您输入的值(因为那是该时区的小时)。


推荐阅读