Извлечение количества месяцев из интервала - PullRequest
0 голосов
/ 22 мая 2018

Что я делаю не так?

SELECT DATE_PART('month', '2018-05-31'::timestamp - '2018-02-24'::timestamp);

Возвращает 0!Все время.Почему?

Я нахожусь на PostgreSQL 10.4.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вао Цун объяснил, почему.

Одним хорошим решением для вас может быть использование функции age, которая форматирует интервал в годах, месяцах и днях:

SELECT date_part('month', age('2018-05-31'::timestamp, '2018-02-24'::timestamp));

 date_part 
-----------
         3
(1 row)

Это даст более точные результаты, потому что не нужно предполагать, что в каждом месяце есть 30 дней.

0 голосов
/ 22 мая 2018

у вас есть:

t=# select '2018-05-31'::timestamp - '2018-02-24'::timestamp;
 ?column?
----------
 96 days
(1 row)

так:

t=# SELECT DATE_PART('day', '2018-05-31'::timestamp - '2018-02-24');
 date_part
-----------
        96
(1 row)

попытайтесь:

t=# SELECT DATE_PART('month', justify_interval('2018-05-31'::timestamp - '2018-02-24'::timestamp));
 date_part
-----------
         3
(1 row)

Я думаю, что необходимо обосновать интервал перед использованием его с date_part должен быть отмечен на
https://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT,, чтобы быть ясным - верно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...