134 votes

PostgreSQL : comment convertir l'époque Unix en date ?

Le relevé me donne la date et l'heure.

Comment pourrais-je modifier l'instruction pour qu'elle ne renvoie que la date (et non l'heure) ?

SELECT to_timestamp( TRUNC( CAST( epoch_ms AS bigint ) / 1000 ) );

228voto

Tomas Greif Points 3919

Vous utilisez to_timestamp puis convertit le timestamp en date

 select to_timestamp(epoch_column)::date;

Plus de détails :

/* Current time */
 select now();  -- returns timestamp

/* Epoch from current time;
   Epoch is number of seconds since 1970-01-01 00:00:00+00 */
 select extract(epoch from now()); 

/* Get back time from epoch */
 -- Option 1 - use to_timestamp function
 select to_timestamp( extract(epoch from now()));
 -- Option 2 - add seconds to 'epoch'
 select timestamp with time zone 'epoch' 
         + extract(epoch from now()) * interval '1 second';

/* Cast timestamp to date */
 -- Based on Option 1
 select to_timestamp(extract(epoch from now()))::date;
 -- Based on Option 2
 select (timestamp with time zone 'epoch' 
          + extract(epoch from now()) * interval '1 second')::date; 

Dans votre cas :

 select to_timestamp(epoch_ms / 1000)::date;

Docs PostgreSQL

31voto

Sinu Points 271
select to_timestamp(cast(epoch_ms/1000 as bigint))::date

a fonctionné pour moi

10voto

Stefano Coletta Points 471

Sur Postgres 10 :

SELECT to_timestamp(CAST(epoch_ms as bigint)/1000)

4voto

yodi Points 408

La solution ci-dessus ne fonctionne pas pour la dernière version de PostgreSQL. J'ai trouvé ce moyen de convertir le temps d'époque qui est stocké dans le nombre et le type de colonne int est sur PostgreSQL 13 :

SELECT TIMESTAMP 'epoch' + (<table>.field::int) * INTERVAL '1 second' as started_on from <table>;

Pour une explication plus détaillée, vous pouvez voir ici https://www.yodiw.com/convert-epoch-time-to-timestamp-in-postgresql/#more-214

3voto

Yegor Points 11

Cela fonctionne bien pour moi :

SELECT t.*,
   to_timestamp(cast(t.prev_fire_time/1000 as bigint)) as prev_fire_time,
   to_timestamp(cast(t.next_fire_time/1000 as bigint)) as next_fire_time,
   to_timestamp(cast(t.start_time/1000 as bigint)) as start_time
FROM public.qrtz_triggers t;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X