Comment convertir un temps Unix en Timstamp PostgreSQL sans timezome?

17

J'ai une base de données PostgreSQL fonctionnant sur un serveur dont le fuseau horaire est défini sur le fuseau horaire de l'Inde (c.-à-d. UTC +5: 30)

J'ai quelques données dans un tableau qui est créé comme ceci:

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

Je souhaite interroger les données et obtenir les valeurs pour une heure spécifique. Mon entrée sera un horodatage Unix (c.-à-d. Secondes du 1er janvier 1970)

La seule façon de convertir le temps unix timestamp j'ai trouvé est le suivant: select to_timestamp(TRUNC(CAST(1395036000 AS bigint))). Mais cela crée un horodatage avec un fuseau horaire. Mes données sont timestamp without time zoneentrées, donc je n'obtiens aucun résultat.

Comment convertir un temps Unix en Timstamp de PostgreSQL sans timezome?

Devdatta Tengshe
la source

Réponses:

37

Voici quelques approches:

J'ai simplifié votre requête, car vous ne devriez pas avoir besoin du TRUNC()ni du CAST().

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

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

Pour référence, plus d'informations peuvent être trouvées sur les liens suivants:

AbuAbdoh
la source
Le deuxième extrait fonctionne également sur RedShift.
Gianluca Casati