Обсуждение: SELECT timestamp('2001-06-12'::date - '2000-06-12'::date)
The "+" operator is not defined for (date, date) which seems very
logical to me since adding dates does in my opinion not make sense.
performance=# SELECT timestamp('2001-06-12'::date + '2000-06-12'::date);
ERROR: Unable to identify an operator '+' for types 'date' and 'date' You will have to retype this query using
anexplicit cast
Surprisingly "-" is defined for (date, date).
performance=# SELECT timestamp('2001-06-12'::date - '2000-06-12'::date);
timestamp
------------------------1970-01-01 01:06:05+01
(1 row)
Does anybody understand the logic behind that operation and why is the
result not something like 1970-01-01 00:00:00?
Hans
Hans-Jürgen Schönig <hs@cybertec.at> writes:
> Surprisingly "-" is defined for (date, date).
What's surprising about that? It yields an integer number of days
between the dates:
regression=# select '2001-06-12'::date - '2000-06-12'::date;?column?
---------- 365
(1 row)
> performance=# SELECT timestamp('2001-06-12'::date - '2000-06-12'::date);
> timestamp
> ------------------------
> 1970-01-01 01:06:05+01
> (1 row)
timestamp(integer) converts a Unix timestamp value (seconds since 1970)
into a timestamp.
regards, tom lane