Как преобразовать время Unix в Timstamp PostgreSQL без timezome?

17

У меня есть база данных PostgreSQL, работающая на сервере, чей часовой пояс установлен на часовой пояс Индии (то есть UTC +5: 30)

У меня есть некоторые данные в таблице, которая создается следующим образом:

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

Я хочу запросить данные и получить значения за определенное время. Мой ввод будет меткой времени Unix (т.е. секунды с 1 января 1970 года)

Единственный способ преобразования времени UNIX в Timestamp я нашел это: select to_timestamp(TRUNC(CAST(1395036000 AS bigint))). Но это создает временную метку с часовым поясом. Мои данные в timestamp without time zone, так что я не получаю никаких результатов.

Как преобразовать время Unix в Timstamp PostgreSQL без timezome?

Девдатта Тенгше
источник

Ответы:

37

Вот несколько подходов:

Я упростил ваш запрос, так как вам не нужно TRUNC()ни то, ни другое CAST().

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

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

Для справки, дополнительную информацию можно найти по следующим ссылкам:

AbuAbdoh
источник
Второй фрагмент работает также на RedShift.
Джанлука Касати