我試圖使用Postgres函數extract()
從timestamptz
列中獲取年份,但得到意外的結果。我預計它會使用UTC,但似乎使用任何系統的本地時區(在我的情況下,EST)。無論時間戳或系統的時區是什麼,我如何讓extract
函數返回UTC?如何從時間戳中提取一致的年份
實施例1:
testdb=# create table foo (t timestamptz check(extract(year from t)::int = 2013));
testdb=# \d foo
Table "public.foo"
Column | Type | Modifiers
--------+--------------------------+-----------
t | timestamp with time zone |
Check constraints:
"foo_t_check" CHECK (date_part('year'::text, t)::integer = 2013)
testdb=# insert into foo values ('2013-01-01 01:49:05.048+00');
ERROR: new row for relation "foo" violates check constraint "foo_t_check"
DETAIL: Failing row contains (2012-12-31 20:49:05.048-05).
實施例2:
testdb=# SELECT EXTRACT(year FROM '01-01-1970 00:00:00 UTC+01'::timestamp with time zone);
date_part
-----------
1969
(1 row)
是的,這是工作 - 謝謝。 – Petriborg 2013-03-26 14:05:52