如何在没有timezome的情况下将unix时间转换为PostgreSQL的Timstamp?


17

我有一个在其时区设置为印度时区(即UTC +5:30)的服务器上运行的PostgreSQL数据库。

我在这样创建的表中有一些数据:

CREATE TABLE "CLOUDDATA"
(
  "CD_Tm_Obs" timestamp without time zone,
  "CD_Avg_Cloud" double precision
)

我想查询数据并获取特定时间的值。我的输入将是Unix时间戳(即1970年1月1日的秒数)

我发现将unix时间转换为时间戳的唯一方法是: select to_timestamp(TRUNC(CAST(1395036000 AS bigint)))。但这会创建带有时区的时间戳。我的数据在中timestamp without time zone,因此没有任何结果。

如何在没有timezome的情况下将unix时间转换为PostgreSQL的Timstamp?

Answers:


37

以下是几种方法:

我简化了您的查询,因为您不需要TRUNC(),也不需要CAST()

SELECT to_timestamp(1395036000) AT TIME ZONE 'UTC';

SELECT timestamp '1970-01-01 00:00:00' + interval '1395036000 second';

作为参考,可以在以下链接中找到更多信息:


第二个片段也适用于RedShift。
Gianluca Casati
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.