Come convertire un tempo unix in Timstamp di PostgreSQL senza timezome?


17

Ho un database PostgreSQL in esecuzione su un server il cui fuso orario è impostato sul fuso orario dell'India (ovvero UTC +5: 30)

Ho alcuni dati in una tabella creata in questo modo:

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

Voglio interrogare i dati e ottenere i valori per un tempo specifico. Il mio input sarà un timestamp Unix (ovvero i secondi dal 1 ° gennaio 1970)

L'unico modo di convertire il tempo unix per Timestamp che ho trovato è questo: select to_timestamp(TRUNC(CAST(1395036000 AS bigint))). Ma questo crea un timestamp con fuso orario. I miei dati sono presenti timestamp without time zone, quindi non ottengo alcun risultato.

Come convertire un tempo unix in Timstamp di PostgreSQL senza timezome?

Risposte:


36

Ecco un paio di approcci:

Ho semplificato la tua richiesta, poiché non dovresti aver bisogno di TRUNC(), né di CAST().

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

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

Per riferimento, ulteriori informazioni sono disponibili ai seguenti collegamenti:


Il secondo frammento funziona anche su RedShift.
Gianluca Casati,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.