5

我的数据库有问题。我从未习惯在 PostgreSQL 中工作,我想从 UTC 日期时间字段中进行选择并获得 GMT 日期时间作为结果。

实际上我的请求是:从位置选择 dateheure Postgresql 请求应该是什么来做我想做的事情???

非常感谢格韦纳尔

4

2 回答 2

12

PostgreSQL 确实有两种日期时间类型

  • timestamp without time zone(默认隐式timestamp
  • timestamp with time zone

我猜你有 UTC 日期时间的表(没有时区类型):

CREATE TEMP TABLE datetimetest
(
    datetime timestamp
);

\d datetimetest
           Table "pg_temp_1.datetimetest"
  Column  |            Type             | Modifiers 
----------+-----------------------------+-----------
 datetime | timestamp without time zone | 

INSERT INTO datetimetest SELECT CURRENT_TIMESTAMP AT TIME ZONE 'UTC';

SELECT datetime FROM datetimetest;
          datetime          
----------------------------
 2011-08-15 15:04:06.507166
(1 row)

要在某个时区获取日期时间,您可以使用AT TIME ZONE构造:

SET TIME ZONE 'UTC';
SELECT datetime AT TIME ZONE 'GMT-5' FROM datetimetest;
           timezone            
-------------------------------
 2011-08-15 10:04:06.507166+00
(1 row)
于 2011-08-15T15:08:47.460 回答
1

在另一篇文章中,我使用CHECK()约束来确保您只存储和接收UTC数据库。希望它会有所帮助。

于 2011-08-16T01:17:55.030 回答