I was just playing with some random timestamps for a week, for a month, for a year ...
select distinct current_date+((random()::numeric)||'month')::interval from generate_series(1,100) order by 1;
It´s with distinct clause because if you change that 'month' for a 'year' it´ll return only 12 rows, instead of 100. So, why years part of interval works differently than any other ?
select '1.01 week'::interval; --> 0 years 0 mons 7 days 1 hours 40 mins 48.00 secs
select '1.01 month'::interval; --> 0 years 1 mons 0 days 7 hours 12 mins 0.00 secs
select '1.01 year'::interval; --> 1 years 0 mons 0 days 0 hours 0 mins 0.00 secs
select '1.01 month'::interval; --> 0 years 1 mons 0 days 7 hours 12 mins 0.00 secs
select '1.01 year'::interval; --> 1 years 0 mons 0 days 0 hours 0 mins 0.00 secs
thanks
Marcos