web-dev-qa-db-fra.com

Comment convertir un intervalle en un nombre d'heures avec postgres?

Dis que j'ai un intervalle comme

4 days 10:00:00

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

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

Le moyen le plus simple est probablement:

SELECT EXTRACT(Epoch FROM my_interval)/3600
251
Magnus Hagander

Si vous voulez un nombre entier, c'est-à-dire un nombre de jours:

SELECT (EXTRACT(Epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
15
Pujan Srivastava

Pour obtenir le nombre de jours, le plus simple serait:

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

Autant que je sache, le résultat serait le même que:

SELECT (EXTRACT(Epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int;
6
belveryin
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));

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

1
haoming

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 choisir cast Sinon, vous pouvez avoir une surprise désagréable une fois que les intervalles sont grands:

    EXTRACT(Epoch FROM field)::int

1
Janek Olszak