我正在Postgres中生成实体化视图,其中一列将包含表示月初的timestamptz。常规选择date_trunc('month',t.starttime)将生成创建或刷新实体化视图的系统所在时区中的月初。
我希望能够指定月初所在的时区,我可以指定时区,但我必须使用字符串,相反,我希望使用存储在表中的值,这将返回一个值,该值将本月的第一天存储为芝加哥的午夜:
select (date_trunc('month', t.tstzcol) at time zone 'America/Chicago')::timestamptz;
但我想用时区名称t.tstzcol.替换“America/芝加哥”。我尝试使用extract(timezone from t.tstzcol)
,但它返回一个整数,不适用于at time zone
如何强制date_trunc返回所需时区的timestamptz,而不是本地时区?
1条答案
按热度按时间fnvucqvd1#
PostgreSQL
timestamp with time zone
不包含时区。相反,该值以2000-01-01 00:00:00 UTC
之后的微秒数存储在数据库中。您看到的时区偏移量是在将该值转换为字符串时基于timezone
的当前设置计算的。您必须将时区存储在第二列中。