我在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标准定义,但定义所表现出的特性导致有用性存疑。在大多数情况下,date
、time
、timestamp without time zone
和timestamp with time zone
的组合应提供任何应用程序所需的日期/时间功能。