Обсуждение: SELECT timestamp('2001-06-12'::date - '2000-06-12'::date)

Поиск
Список
Период
Сортировка

SELECT timestamp('2001-06-12'::date - '2000-06-12'::date)

От
Hans-Jürgen Schönig
Дата:
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



Re: SELECT timestamp('2001-06-12'::date - '2000-06-12'::date)

От
Tom Lane
Дата:
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