web-dev-qa-db-fra.com

Comment convertir un temps Unix en timestamp PostgreSQL sans fuseau horaire?

J'ai une base de données PostgreSQL exécutée sur un serveur dont le fuseau horaire est défini sur le fuseau horaire de l'Inde (c'est-à-dire 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'est-à-dire secondes du 1er janvier 1970)

La seule façon de convertir l'heure Unix en horodatage que j'ai trouvée est la suivante: select to_timestamp(TRUNC(CAST(1395036000 AS bigint))). Mais cela crée un horodatage avec un fuseau horaire. Mes données sont dans timestamp without time zone, Donc je n'obtiens aucun résultat.

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

17
Devdatta Tengshe

Voici quelques approches:

J'ai simplifié votre requête, car vous ne devriez pas avoir besoin de la TRUNC(), ni de la 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:

37
AbuAbdoh