【问题标题】:Postgres time with time zone equality具有时区相等性的 Postgres 时间
【发布时间】:2013-12-30 00:35:56
【问题描述】:

我在 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

我对@9​​87654327@ 有什么误解吗?如何以与 timestamp with time zone 平等相同的方式处理时区的方式评估平等?

【问题讨论】:

    标签: sql postgresql time timezone


    【解决方案1】:

    这里有两种评估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
    第二个使用AT TIME ZONE construct

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

    引用手册here

    time with time zone 类型是由 SQL 标准定义的,但是 定义展示了导致可疑有用性的属性。 在大多数情况下,datetimetimestamp without time zonetimestamp with time zone 的组合应该提供完整的范围 任何应用程序所需的日期/时间功能。

    【讨论】:

    • 好的,我们不应该使用time with time zone,但是我们应该如何节省一天中依赖于语言环境的一个小时呢?我们应该使用time 列并在应用程序层转换为UTC,还是最好将日期与时间结合起来(如果可用)并使用timestamp with time zone 列,即使我们已经有一个日期列同一张桌子?你推荐什么方法?
    • @Luiz:这取决于您实际需要的信息。抽象时间?绝对时间点?时间和地点?还是时间和时区?请将您的案例作为新的问题提出,cmets 不是这个地方。您始终可以链接到此以获取上下文。如果您想链接回来,请在此处发表评论。
    • 感谢您的回答。我按照您的建议创建了一个新问题。如果可以看一下:stackoverflow.com/questions/50277141/…
    猜你喜欢
    • 1970-01-01
    • 2019-12-15
    • 2016-12-03
    • 2013-04-27
    • 2014-12-20
    • 2023-03-19
    • 2020-07-07
    • 2019-11-08
    • 1970-01-01
    相关资源
    最近更新 更多