postgresql 从TIMESTAMPTZ提取本地日期

dddzy1tm  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(81)

我读过Extract date part from timestamptz,但这并没有回答这个问题。
我有timestamp with time zone列。并不是所有的值都存储在同一个时区(尽管我知道,postgres实际上是用UTC存储的)。
我想提取日期,**在本地时区。**不是转换到数据库的默认时区后的日期,也不是转换到我的会话的时区后的日期。
例如,考虑2020-01-01 23:00:00-07。下面的三个查询都返回2020-01-02,当我想要的结果是2020-01-01

SET TIMEZONE TO 'UTC';

SELECT '2020-01-01 23:00:00-07'::TIMESTAMPTZ::DATE;
SELECT date('2020-01-01 23:00:00-07'::TIMESTAMPTZ);
SELECT DATE_TRUNC('day', '2020-01-01 23:00:00-07'::TIMESTAMPTZ)::DATE;

字符串
更改会话的时区以获得所需结果并不是解决方案。我正在寻找一个通用的解决方案,它应该独立于会话的时区工作,并适用于可能存储在列中的所有偏移,而不仅仅是上面的玩具示例中的偏移。

wz3gfoph

wz3gfoph1#

在发布这篇文章后不久,我意识到我是多么的困惑。正如Adrian的评论所说,时区并没有真正存储。如果我这么做我会注意到的

SELECT '2020-01-01 23:00:00-07'::TIMESTAMPTZ;

字符串
所以我的问题的简短回答是,这是不可能的(除非你自己单独存储这些信息)。
而不是删除这个问题,我会留下它的情况下,任何其他失去和困惑的灵魂有同样的问题,我会链接到这篇优秀的文章,其中解释了更详细的https://phili.pe/posts/timestamps-and-time-zones-in-postgresql/

相关问题