回答

收藏

时区相等的Postgres时间

技术问答 技术问答 197 人阅读 | 0 人回复 | 2023-09-13

我time with time zone在Postgres的平等问题上遇到了麻烦。 timestamp with time9 a5 K0 c! w4 s! j" y1 D
zone平等的工作方式与我期望的一样,如果在对时区进行归一化之后,如果时间相同,那么它应该为真:
& I( s: f& B) O9 T3 Dpostgres=# select '2013-06-27 12:00:00 -0800'::timestamp with time zone = '2013-06-27 14:00:00 -0600'::timestamp with time zone;5 k7 X7 i9 R0 U- Z7 r; p* x8 _
?column?
0 R! N9 B# s) e  |! L+ m9 S- S----------: h6 l, k5 b/ }4 a# k* h3 v
t% E; k1 S* q0 w' ]$ s
但是,似乎不适用于以下情况time with time zone:* H3 F4 f( A. b/ `5 {
postgres=# select '12:00:00 -0800'::time with time zone = '14:00:00 -0600'::time with time zone;
& V9 s1 x' s1 g/ ]& h) l+ A ?column?
2 s' l5 L0 a2 ^% z: b----------
9 i* K! A; ?) x! c) s/ I* h9 k f
) o+ P6 I7 B, q9 c但是,不平等在我期望他们如何实现的过程中起作用:
! [; G& M( A" H7 x( N) r" e/ c+ apostgres=# select '12:00:00 -0800'::time with time zone  '13:59:00 -0600'::time with time zone;; R/ ?' P/ E/ x' [7 v
?column?1 ], D# w$ b+ I" D, |
----------( w! Q6 l# ^; s, E+ C7 s
t. R, Q9 F2 q4 U4 h
我有什么误会time with time zone吗?如何以与timestamp with time zone平等相同的方式处理时区来评估平等?
9 V5 v8 m+ C( s' E: Y1 r0 W% R  y, ]                " t" w$ E) Q- d; W) f
解决方案:! A( j2 D2 _) O8 `
               
+ _3 c7 M3 H, A) v* A7 Q9 @7 }) y' N5 S) P6 B, J

4 O9 h2 D8 h5 E& p" q" X                以下是两种评估timetz平等的方法:+ D. h1 f! J  e( x1 H& @8 Q
SELECT a, b, a = b AS plain_equality
7 a$ b' N9 S* A      ,'2000-1-1'::date + a = '2000-1-1'::date + b AS ts_equality
6 [! u0 p: z! ^) x  @! ?      ,a AT TIME ZONE 'UTC', b AT TIME ZONE 'UTC'  AS timetz_equality# m% X* O  p0 S* o- B2 }% O+ h( D
FROM (
6 s! F. m8 C0 ]/ `+ B   SELECT '12:00:00 -0800'::timetz AS a, '14:00:00 -0600'::timetz AS b% Y, e3 H2 A8 G4 {2 Y, W
   ) sub;8 Y/ @% ?0 Y1 N( k/ x
在 第一个 将它添加到一个date。该 第二 通过使用AT TIME
7 U. P& J1 ^* @1 r2 N# E9 c# BZONE构建体。. B% S# w' u- B, w  |
但不要使用time with time zone。曾经。
; r3 P6 a  y+ c1 ^% ZPostgres仅支持该类型,因为它在SQL标准中。但是它是设计破坏的(不能考虑DST!),不建议使用。" u0 u, H  G, G- Q  P! C
在这里引用手册:6 K& O8 l; @) g; p# m3 o' a$ u- a
- z6 G3 X! w/ h7 X% f1 |# }
类型time with time
5 x6 S1 p. |6 a5 ~zone是由SQL标准定义的,但是定义显示的属性会导致有用的疑问。在大多数情况下,组合date,time,timestamp without$ |' F! i9 W! ]) c
time zone,和timestamp with time zone应提供的任何应用程序所需要的日期/时间功能的完整范围。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则