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)
Le moyen le plus simple est probablement:
SELECT EXTRACT(Epoch FROM my_interval)/3600
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
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;
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
.
Si vous convertissez un champ de table:
Définissez le champ pour qu'il contienne des secondes:
CREATE TABLE IF NOT EXISTS test (
...
field INTERVAL SECOND(0)
);
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