Hi

2014-08-22 9:05 GMT+02:00 David G Johnston <david.g.johns...@gmail.com>:

> Piotr Gasidło wrote
> > Hello,
> >
> > I found strange PostgreSQL 9.3 behavior:
> >
> >> select now()::timestamp, 'now()'::timestamp;
> >             now             |         timestamp
> > ----------------------------+----------------------------
> >  2014-08-22 08:34:00.883268 | 2014-08-22 08:34:00.883268
> >
> > Second column is now() in single apostrophes.
> >
> > Now, I tried similar function, clock_timestamp() and get:
> >
> >> select clock_timestamp()::timestamp, 'clock_timestamp()'::timestamp;
> > ERROR:  invalid input syntax for type timestamp: "clock_timestamp()"
> > LINE 1: select clock_timestamp()::timestamp, 'clock_timestamp()'::ti...
> >                                                ^
> >
> > Why is NOW() so special? Where is it documented? And why not working with
> > other timestamp returning internal functions?
> >
> >> select version();
> >                                                                version
> >
> >
> --------------------------------------------------------------------------------------------------------------------------------------
> >  PostgreSQL 9.3.4 on amd64-portbld-freebsd10.0, compiled by FreeBSD clang
> > version 3.3 (tags/RELEASE_33/final 183502) 20130610, 64-bit
> > (1 wiersz)
> >
> >
> > --
> > Piotr Gasidło
>
> SELECT ' now** '::timestamp --works
>
> Pretty much any symbol before or after the word now is allowed and you
> still
> get a valid result.  Putting a letter or number anywhere in the string
> causes an input syntax error.
>
> Tested on 9.0
>
> As for documentation:
>
> http://www.postgresql.org/docs/9.2/interactive/datetime-input-rules.html
>
> 2.b
>
> 'now' is a "special string" as referenced in this rule
>
> The tokenizer must be constructed to throw away whitespace and any symbols
> except those used in normal timestamps (~ [:/-])
>
> <tests 'now-'>
>
> Yep, ^ gives me an error.
>
> That appendix section is missing considerable detail that I've inferred
> from
> the observed behavior - though some of the gaps are filled in once you've
> read the following:
>
> http://www.postgresql.org/docs/9.2/interactive/datatype-datetime.html
>
> The above also explains that the special SQL keywords cannot be used as
> string literals though as is often the case it omits any discussion as to
> why.  The fact that they are functions obviously does not preclude them
> from
> also being keywords...
>
> Most likely its this way for SQL standards compatibility reasons.
>
> Do you have a use-case you'd like to share or is this curiosity after
> accidentally finding out that 'now'::timestamp actually works?
>
> David J.
>
>
>
there are more than "now"

postgres=# select 'now'::timestamp;
         timestamp
----------------------------
 2014-08-22 09:08:26.956702
(1 row)

postgres=# select 'tomorrow'::timestamp;
      timestamp
---------------------
 2014-08-23 00:00:00
(1 row)

postgres=# select 'today'::timestamp;
      timestamp
---------------------
 2014-08-22 00:00:00
(1 row)

postgres=# select 'yesterday'::timestamp;
      timestamp
---------------------
 2014-08-21 00:00:00
(1 row)


Regards

Pavel



>
>
>
>
>
> --
> View this message in context:
> http://postgresql.1045698.n5.nabble.com/SELECT-NOW-OK-SELECT-CLOCK-TIMESTAMP-ERROR-tp5815823p5815826.html
> Sent from the PostgreSQL - general mailing list archive at Nabble.com.
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>

Reply via email to