Thread: Subtracting Two Intervals

Subtracting Two Intervals

From
Terry Lee Tucker
Date:
In porting from 7.4.19 to 8.3.1 I have found the following:

7.4.19:
mwr=# select interval '1 day 15 hours 30 minutes' - interval '29 hours';
      ?column?
--------------------
 @ 10 hours 30 mins
(1 row)

8.3.1:
mwr83=# select interval '1 day 15 hours 30 minutes' - interval '29 hours';
          ?column?
----------------------------
 @ 1 day -13 hours -30 mins
(1 row)

Is that right? I mean if you take 1 day (24 hours) and add -13 hours and -30
minutes, you get 10 hours and 30 minutes, but is it supposed to display that
way?

TIA
--
Terry Lee Tucker
Turbo's IT Manager
Turbo, division of Ozburn-Hessey Logistics
2251 Jesse Jewell Pkwy NE
Gainesville, GA 30501
Tel: (336) 372-6812  Fax: (336) 372-6812  Cell: (336) 404-6987
terry@turbocorp.com
www.turbocorp.com

Re: Subtracting Two Intervals

From
Bruce Momjian
Date:
Terry Lee Tucker wrote:
> In porting from 7.4.19 to 8.3.1 I have found the following:
>
> 7.4.19:
> mwr=# select interval '1 day 15 hours 30 minutes' - interval '29 hours';
>       ?column?
> --------------------
>  @ 10 hours 30 mins
> (1 row)
>
> 8.3.1:
> mwr83=# select interval '1 day 15 hours 30 minutes' - interval '29 hours';
>           ?column?
> ----------------------------
>  @ 1 day -13 hours -30 mins
> (1 row)
>
> Is that right? I mean if you take 1 day (24 hours) and add -13 hours and -30
> minutes, you get 10 hours and 30 minutes, but is it supposed to display that
> way?

We removed assumptions that every day is 24 hours between those
releases. You can use justify_hours() to get the proper result:

    test=> select justify_hours(interval '1 day 15 hours 30 minutes' -
    interval '29 hours');
     justify_hours
    ---------------
     10:30:00
    (1 row)

There have been good arguments that justify_hours() behavior should be
the default.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +