Re: SQL compliant interval implementation

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: SQL compliant interval implementation
Дата
Msg-id 200605232104.k4NL4Io05845@candle.pha.pa.us
обсуждение исходный текст
Ответ на SQL compliant interval implementation  ("Brendan Jurd" <direvus@gmail.com>)
Список pgsql-hackers
I don't see how this makese our system any better than it does not.  It
just seems to eliminate the 30-day problem by not allowing it.  That
doesn't seem to be a step forward.

---------------------------------------------------------------------------

Brendan Jurd wrote:
> Hi all,
> 
> I've been looking at the postgres interval implementation lately, and
> I'm interested in putting together an improved implementation that
> accords more closely with the SQL specification, in particular with:
> 
> ---
> 4.6.2 Intervals
> 
> There are two classes of intervals. One class, called year-month
> intervals, has an express or implied datetime precision that includes
> no fields other than YEAR and MONTH, though not both are required. The
> other class, called day-time intervals, has an express or implied
> interval precision that can include any fields other than YEAR or
> MONTH.
> ---
> 
> The reason for intervals being divided into two classes is that
> interval days and months (as distinct from datetime days and months)
> have no well-defined relationship.
> 
> The current postgres implementation uses a conversion rate of 30 days
> to the month, but this appears to be a band-aid solution to a deeper
> problem; that postgres is trying to do with a single type something
> which really should be done with two.
> 
> Imagine that I tried to implement a unified "length" type that
> contained two fields, "metres" and "hobbits", where the number of
> hobbits per metre differs from one hobbit to the next, but nonetheless
> you're allowed to perform comparison and conversion between hobbits
> and metres.  People would haul me out into the proverbial town square
> and throw rotten tomatoes at me.  And rightly so.
> 
> I think the SQL standard has the right idea.  Keep the year-months and
> the day-times separate.  Don't try to perform arithmetic or
> comparisons between the two.
> 
> I note that this has been discussed on the mailing lists a few times
> before, but I didn't see any conclusion or consensus reached.
> 
> So, the question is, are there any compelling reasons we shouldn't try
> to implement "interval" as two types?  Does the existing unified
> approach offer any significant advantages?
> 
> The only such advantage I can see is that it's easy for the user to
> specify month values and day values together when performing date
> arithmetic, for example if I wanted to add 1 month and 12 days to a
> date, under the current approach I would simply issue:
> 
> > SELECT dateval + interval '1 month 12 days';
> 
> That's nice and convenient, however, there's no reason we can't keep
> this simple under a separated approach:
> 
> > SELECT dateval + interval month '1' + interval second '12 days';
> 
> With ISO INTERVAL syntax (already listed as a TODO item) this becomes
> a bit more human-readable:
> 
> > SELECT dateval + interval '1' month + interval '12' day;
> 
> By defining some convenient numeric input functions it becomes very
> readable (not to mention incredibly easy to parse into the internal
> format, versus textual inputs)
> 
> > SELECT dateval + months(1) + days(12);
> 
> It could be done without breaking existing applications; just
> implement the two new interval types, and leave the old unified
> interval in place as a deprecated type, then drop it after a few major
> releases.
> 
> The day-time interval type would be pretty much the same as the
> existing interval, with the month field removed.  The year-month field
> would simply be a signed integer.
> 
> Thanks in advance for your comments.
> 
> Regards,
> BJ
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 6: explain analyze is your friend
> 

--  Bruce Momjian   http://candle.pha.pa.us EnterpriseDB    http://www.enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


В списке pgsql-hackers по дате отправления:

Предыдущее
От: "Brendan Jurd"
Дата:
Сообщение: SQL compliant interval implementation
Следующее
От: Tom Lane
Дата:
Сообщение: Re: SQL compliant interval implementation