Jak przekonwertować czas uniksowy na znacznik czasu PostgreSQL bez timzome?

17

Mam bazę danych PostgreSQL działającą na serwerze, którego strefa czasowa jest ustawiona na strefę czasową Indii (tj. UTC +5: 30)

Mam pewne dane w tabeli, która jest tworzona w następujący sposób:

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

Chcę zapytać o dane i uzyskać wartości dla określonego czasu. Moje wejście będzie uniksowym znacznikiem czasu (tj. Sekund od 1 stycznia 1970)

Jedynym sposobem konwersji czasu Unix Timestamp Znalazłem to: select to_timestamp(TRUNC(CAST(1395036000 AS bigint))). Ale to tworzy znacznik czasu ze strefą czasową. Moje dane są włączone timestamp without time zone, więc nie otrzymuję żadnych wyników.

Jak przekonwertować czas uniksowy na znacznik czasu PostgreSQL bez timzome?

Devdatta Tengshe
źródło

Odpowiedzi:

37

Oto kilka podejść:

Uprościłem twoje zapytanie, ponieważ nie powinieneś potrzebować TRUNC()ani CAST().

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

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

W celach informacyjnych więcej informacji można znaleźć pod następującymi linkami:

AbuAbdoh
źródło
Drugi fragment działa również na RedShift.
Gianluca Casati