On Fri, Apr 2, 2021 at 11:05 AM Bruce Momjian <br...@momjian.us> wrote:
> On Thu, Apr 1, 2021 at 09:46:58PM -0700, Bryn Llewellyn wrote: > > Or am I misunderstanding something? > > > > Try this. The result of each “select” is shown as the trailing comment > on the > > same line. I added whitespace by hand to line up the fields. > > > > select interval '-1.7 years'; -- -1 years -8 > mons > > > > select interval '29.4 months'; -- 2 years 5 > mons 12 > > days > > > > select interval '-1.7 years 29.4 months'; -- 8 > mons 12 > > days << wrong > > select interval '29.4 months -1.7 years'; -- 9 > mons 12 > > days > > > > select interval '-1.7 years' + interval '29.4 months'; -- 9 > mons 12 > > days > > select interval '29.4 months' + interval '-1.7 years'; -- 9 > mons 12 > > days > > > While maybe there is an argument to fixing the negative/positive rounding issue - there is no way this gets solved without breaking the current implementation select interval '0.3 years' + interval '0.4 years' - interval '0.7 years' + interval '0.1 years' should not equal 0 but it certainly does. Unless we take the concept of 0.3 years = 3 months and move to something along the lines of 1 year = 360 days 1 month = 30 days so therefore 0.3 years = 360 days * 0.3 = 108 days = 3 months 18 days 0.4 years = 360 days * 0.4 = 144 days = 4 months 24 days 0.7 years = 360 days * 0.7 = 252 days = 8 months 12 days Then, and only if we don't go to any more than tenths of a year, does the math work. Probably this should resolve down to seconds and then work backwards - but unless we're looking at breaking the entire way it currently resolves things - I don't think this is of much value. Doing math on intervals is like doing math on rounded numbers - there is always going to be a pile of issues because the level of precision just is not good enough. John