Обсуждение: help on to_date conversion please....
I am converting an 8 digit number to a date. I don't see a postgres
function to do it direct, but two functions seems like I'm on the right
track, to_char and to_date. Individually I get them to work, but when I
combine them I get the wrong answer. see below. Can anyone help in
getting the right date from an 8 digit number input formatted as yyyymmdd?
hwds=# select to_char(20020101, '99999999');
to_char
-----------
20020101 CORRECT.
(1 row)
hwds=# select to_date('20020101','yyyymmdd');
to_date
------------
2002-01-01 CORRECT.
(1 row)
hwds=# select to_date(to_char(20020101, '99999999'),'yyyymmdd');
to_date
------------
2003-08-12 WHY DOES IT GIVE ME DIFFERENT ANSWER WHEN I COMBINE THE
FUNCTIONS?
(1 row)
Never mind. Just figured it out. Need to grab the substring from 2 for 8
from the to_char result because it holds character number 1 reserv ed for +
or - signs. + is default or white space. I think that is the reason. Any
other input?????
hwds=# select to_date(substring(to_char(20020101, '99999999') from 2 for
8), 'yyyymmdd');
to_date
------------
2002-01-01
(1 row)
At 03:13 PM 4/3/02 -0800, Chris Pesko wrote:
>I am converting an 8 digit number to a date. I don't see a postgres
>function to do it direct, but two functions seems like I'm on the right
>track, to_char and to_date. Individually I get them to work, but when I
>combine them I get the wrong answer. see below. Can anyone help in
>getting the right date from an 8 digit number input formatted as yyyymmdd?
>
>
>hwds=# select to_char(20020101, '99999999');
> to_char
>-----------
> 20020101 CORRECT.
>(1 row)
>
>hwds=# select to_date('20020101','yyyymmdd');
> to_date
>------------
> 2002-01-01 CORRECT.
>(1 row)
>
>hwds=# select to_date(to_char(20020101, '99999999'),'yyyymmdd');
> to_date
>------------
> 2003-08-12 WHY DOES IT GIVE ME DIFFERENT ANSWER WHEN I COMBINE THE
> FUNCTIONS?
>(1 row)
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
On Wed, 3 Apr 2002, Chris Pesko wrote: > Never mind. Just figured it out. Need to grab the substring from 2 for 8 > from the to_char result because it holds character number 1 reserv ed for + > or - signs. + is default or white space. I think that is the reason. Any > other input????? You might want to try the FM format on the to_char string... sszabo=# select to_date(to_char(20020101, 'FM99999999'),'yyyymmdd'); to_date ------------ 2002-01-01 (1 row)
Thanks. That seems a better way to go. At 03:47 PM 4/3/02 -0800, Stephan Szabo wrote: >On Wed, 3 Apr 2002, Chris Pesko wrote: > > > Never mind. Just figured it out. Need to grab the substring from 2 for 8 > > from the to_char result because it holds character number 1 reserv ed for + > > or - signs. + is default or white space. I think that is the reason. Any > > other input????? > >You might want to try the FM format on the to_char string... >sszabo=# select to_date(to_char(20020101, 'FM99999999'),'yyyymmdd'); > to_date >------------ > 2002-01-01 >(1 row)
On Wed, Apr 03, 2002 at 04:02:11PM -0800, Chris Pesko wrote:
> Thanks. That seems a better way to go.
The PostgreSQL docs is your good friend :-)
> At 03:47 PM 4/3/02 -0800, Stephan Szabo wrote:
>
> >You might want to try the FM format on the to_char string...
> >sszabo=# select to_date(to_char(20020101, 'FM99999999'),'yyyymmdd');
> > to_date
> >------------
> > 2002-01-01
> >(1 row)
The extra space is very common for all to_...() outputs/inputs and is
needful thing of this. Don't ask me why.. it's Oracle idea.
Karel
--
Karel Zak <zakkr@zf.jcu.cz>
http://home.zf.jcu.cz/~zakkr/
C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz