Comment convertir un intervalle en plusieurs heures avec postgres?

Disons que j’ai un intervalle comme

4 days 10:00:00 

en postgres. Comment puis-je convertir cela en nombre d’heures (106 dans ce cas?) Y a-t-il une fonction ou devrais-je mordre la balle et faire quelque chose comme

 extract(days, my_interval) * 24 + extract(hours, my_interval) 

Le moyen le plus simple est probablement le suivant:

 SELECT EXTRACT(epoch FROM my_interval)/3600 

Si vous voulez un nombre entier c’est-à-dire le nombre de jours:

 SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int 

Pour obtenir le nombre de jours le plus simple serait:

 SELECT EXTRACT(DAY FROM NOW() - '2014-08-02 08:10:56'); 

À ma connaissance, cela reviendrait à:

 SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int; 

select floor((date_part('epoch', order_time - '2016-09-05 00:00:00') / 3600)), count(*) from od_a_week group by floor((date_part('epoch', order_time - '2016-09-05 00:00:00') / 3600));

La conversion ::int suit le principe de l’arrondi. Si vous souhaitez un résultat différent, tel que l’arrondi, vous pouvez utiliser la fonction mathématique correspondante telle que floor .

Si vous convertissez un champ de table:

  1. Définissez le champ pour qu’il contienne des secondes: CREATE TABLE IF NOT EXISTS test ( ... field INTERVAL SECOND(0) );
  2. Extraire la valeur. N’oubliez pas de lancer dans int sinon vous pouvez obtenir une surprise désagréable une fois que les intervalles sont grands: EXTRACT(EPOCH FROM field)::int
  select date 'now()' - date '1955-12-15'; 

Voici la requête simple qui calcule le nombre total de jours.