Postgres时间与时区相等



我在Postgres中使用time with time zone等式时遇到了一些问题。timestamp with time zone等式按我预期的方式工作,如果时区标准化后时间相同,那么它应该是真的:

postgres=# select '2013-06-27 12:00:00 -0800'::timestamp with time zone = '2013-06-27 14:00:00 -0600'::timestamp with time zone;
 ?column?
----------
 t

然而,这似乎不适用于time with time zone:

postgres=# select '12:00:00 -0800'::time with time zone = '14:00:00 -0600'::time with time zone;
 ?column?
----------
 f

然而,不平等现象正如我所期望的那样发挥作用:

postgres=# select '12:00:00 -0800'::time with time zone < '14:01:00 -0600'::time with time zone;
 ?column?
----------
 t
postgres=# select '12:00:00 -0800'::time with time zone > '13:59:00 -0600'::time with time zone;
 ?column?
----------
 t

我对time with time zone有什么误解吗?如何像timestamp with time zone等式那样处理时区来评估等式?

以下是评估timetz相等性的两种方法:

SELECT a, b, a = b AS plain_equality
     , '2000-1-1'::date + a = '2000-1-1'::date + b AS ts_equality
     , a AT TIME ZONE 'UTC', b AT TIME ZONE 'UTC'  AS timetz_equality
FROM  (
   SELECT '12:00:00 -0800'::timetz AS a
        , '14:00:00 -0600'::timetz AS b
   ) sub;

第一种方法是将其添加到date
第二个是使用CCD_ 8结构。

但不要使用time with time zone
Postgres支持该类型只是因为它在SQL标准中。它被设计破坏了(不能考虑DST!),不鼓励使用它。

此处引用手册:

类型time with time zone由SQL标准定义,但定义所表现出的特性导致有用性存疑。在大多数情况下,datetimetimestamp without time zonetimestamp with time zone的组合应提供任何应用程序所需的日期/时间功能。

相关内容

  • 没有找到相关文章

最新更新