Re: INTERVAL data type and libpq - what format?

Поиск
Список
Период
Сортировка
От Sebastien FLAESCH
Тема Re: INTERVAL data type and libpq - what format?
Дата
Msg-id 4A1A4970.9090101@4js.com
обсуждение исходный текст
Ответ на Re: INTERVAL data type and libpq - what format?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
Tom Lane wrote:
> Ron Mayer <rm_pg@cheapcomplexdevices.com> writes:
>> Sam Mason wrote:
>>> You get an error because " 123 11" isn't a valid literal of an
>>> (undecorated) INTERVAL type.
>
>> Hmm..... should it be?
>
> Well, we do allow it if it's *explicitly* stated to be a day to hour
> interval:
>
> regression=# select interval '123 11' day to hour;
>      interval
> -------------------
>  123 days 11:00:00
> (1 row)
>
> What's at issue here is what should happen without that context.
> I'm inclined to think this is ambiguous enough that accepting it
> silently isn't such a great idea.  I'm also not convinced that the
> SQL spec says we must --- the syntax for <interval literal> does
> not appear to allow omitting the fields specification.
>
> In a related example,
>
> regression=# select interval '123 11' day;
>  interval
> ----------
>  134 days
> (1 row)
>
> we seem to be adding the 123 and 11 together.  This is, um,
> surprising behavior ... I'd be inclined to think throwing an
> error is more appropriate.
>
>             regards, tom lane
>

FYI, with Informix, you don't pass a string in interval literals;
You pass digits directly and the interval qualifiers are mandatory:

=======================================================================

 > select interval('123 11') from systables where tabid=1;

   201: A syntax error has occurred.
Error in line 1
Near character position 27


 > select interval(123 11) from systables where tabid=1;

   201: A syntax error has occurred.
Error in line 1
Near character position 25


 > select interval(123 11) day to hour from systables where tabid=1;

  1261: Too many digits in the first field of datetime or interval.
Error in line 1
Near character position 37


 > select interval(123 11) day(3) to hour from systables where tabid=1;


(constant)

  123 11

1 row(s) retrieved.

=======================================================================

Seb

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

Предыдущее
От: Scara Maccai
Дата:
Сообщение: using explain to get query expected time
Следующее
От: Ramiro Diaz Trepat
Дата:
Сообщение: very large tables