Hello, 

# An interval in " years months ... seconds " given in seconds by EXTRACT(EPOCH 
...) transtyped into INTERVAL : 
SELECT (EXTRACT(EPOCH FROM ('3 years 2 months 1 day 10 hours 11 minutes 12 
seconds'::interval) ) || ' seconds')::interval ; 
interval 
------------- 
27772:11:12 

# The same interval in seconds formated with TO_CHAR() : 
SELECT TO_CHAR((EXTRACT(EPOCH FROM ('3 years 2 months 1 day 10 hours 11 minutes 
12 seconds'::interval) ) || ' seconds')::interval, ' yyyy mm dd_ hh24-mi-ss ') 
; 
to_char 
--------------------------- 
0000 00 00_ 27754-11-12 

=> The result is given in hours ... (not in days ...). 

It is logical that there are neither years nor months because they are not 
constant (leap year or not; a month can contain 31 30 ... days). 
I thought that days were eliminated because of the leap second (extra seconds 
inserted in the UTC time scale); obviously, this is not the case. 

# PostgreSQL does not take into account the additional second (leap second) in 
some calendar days ; eg. 2016, 31 dec. : 
SELECT to_timestamp('20170102 10:11:12','yyyymmdd hh24:mi:ss') - 
to_timestamp('20161230 00:00:00','yyyymmdd hh24:mi:ss') intervalle ; 
intervalle 
----------------- 
3 days 10:11:12 
--> With postgreSQL, a calendar day is always 86,400 seconds long. 

So, is there a reason for this (interval in hours ...) ? 

Regards 
----- Météo-France ----- 
PALAYRET Jacques 
DCSC/GDC 
jacques.palay...@meteo.fr 
Fixe : +33 561078319 

Reply via email to