The*_*uhn 5 sql postgresql time timezone
我time with time zone在 Postgres 中遇到了一些问题。 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
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不适用于time with time zone:
postgres=# select '12:00:00 -0800'::time with time zone = '14:00:00 -0600'::time with time zone;
?column?
----------
f
Run Code Online (Sandbox Code Playgroud)
然而,不平等如何运作,我希望它们能:
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
Run Code Online (Sandbox Code Playgroud)
我有什么误解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;
Run Code Online (Sandbox Code Playgroud)
第一种方法是将其添加到date.
第二个通过使用AT TIME ZONE构造。
而是根本不使用time with time zone。
Postgres 支持该类型只是因为它在 SQL 标准中。它被设计破坏了(不能考虑 DST!)并且不鼓励使用它。
在这里引用手册:
该类型
time with time zone是由 SQL 标准定义的,但该定义展示了导致有用性可疑的属性。在大多数情况下,组合date,time,timestamp without time zone,和timestamp with time zone应提供的任何应用程序所需要的日期/时间功能的完整范围。
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |