Thread: to_date() accepts wrong input data

to_date() accepts wrong input data

From
Andreas Kretschmer
Date:
Hi,

I'm a little bit astonished:

test=*# select to_date('2012/30/03','yyyy/mm/dd');
  to_date
------------
 2014-06-07
(1 row)

test=*# select to_date('2013/02/29','yyyy/mm/dd');
  to_date
------------
 2013-03-01
(1 row)


Bug or feature? Version is 9.2.0



Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect.                              (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly."   (unknown)
Kaufbach, Saxony, Germany, Europe.              N 51.05082°, E 13.56889°


Re: to_date() accepts wrong input data

From
Tom Lane
Date:
Andreas Kretschmer <akretschmer@spamfence.net> writes:
> Hi,
> I'm a little bit astonished:

> test=*# select to_date('2012/30/03','yyyy/mm/dd');
>   to_date
> ------------
>  2014-06-07
> (1 row)

> test=*# select to_date('2013/02/29','yyyy/mm/dd');
>   to_date
> ------------
>  2013-03-01
> (1 row)

> Bug or feature? Version is 9.2.0

Feature, I'm afraid --- people are used to that behavior, see eg
http://archives.postgresql.org/pgsql-general/2012-10/msg00209.php

If you want tighter checking, don't use to_date, use the regular
datetime input functions (eg, via a cast to date or timestamp).

            regards, tom lane