Re: Problem in converting int to timestamp value - why?

Поиск
Список
Период
Сортировка
От Michael Fuhr
Тема Re: Problem in converting int to timestamp value - why?
Дата
Msg-id 20040919151232.GA94970@winnie.fuhr.org
обсуждение исходный текст
Ответ на Problem in converting int to timestamp value - why?  (Soeren Gerlach <soeren@all-about-shift.com>)
Ответы Re: Problem in converting int to timestamp value - why?
Re: Problem in converting int to timestamp value - why?
Список pgsql-general
On Sun, Sep 19, 2004 at 04:17:52PM +0200, Soeren Gerlach wrote:

> I've an integer column in a certain table that I need to convert into a
> timestamp value to finally get a day difference to the current date.
> >From the manual it looks like straight forward, but the following line
> is a great mistery for me:
>
>   SELECT to_timestamp(to_char(20041217, '9999 99 99'), 'YYYY MM DD')
>
> results in a timestamp "2171-11-05 22:00:00" ??? The int-to-char
> conversion works well ("2004 12 17") but the to_timestamp() doesn't work
> as expected - why?

to_char() is returning a leading space:

  test=> SELECT 'x' || to_char(20041217, '9999 99 99') || 'y';
     ?column?
  ---------------
   x 2004 12 17y

The leading space is confusing to_timestamp():

  test=> SELECT to_timestamp(' 2004 12 17', 'YYYY MM DD');
      to_timestamp
  ---------------------
   2171-11-06 06:00:00

You can tell to_timestamp() to account for the leading space or you
can tell to_char() to suppress it:

  test=> SELECT to_timestamp(to_char(20041217, '9999 99 99'), ' YYYY MM DD');
        to_timestamp
  ------------------------
   2004-12-17 00:00:00-07

  test=> SELECT to_timestamp(to_char(20041217, 'FM9999 99 99'), 'YYYY MM DD');
        to_timestamp
  ------------------------
   2004-12-17 00:00:00-07

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

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

Предыдущее
От: Jim J
Дата:
Сообщение: Re: order of row processing affects updates
Следующее
От: Greg Stark
Дата:
Сообщение: Re: order of row processing affects updates