Количество дней в диапазоне дат - PullRequest
0 голосов
/ 12 сентября 2018

Как вы извлекаете количество дней из столбца типа daterange? Возможно ли это?

Я пытался

select age(daterange('2018-01-01', '2018-02-01'));

Но это не удалось, я также попытался привести к int без удачи. Я просмотрел документы, но не смог найти ни одной функции, которая могла бы реализовать это в типах диапазонов.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Мы можем попробовать использовать функции upper() и lower(), чтобы найти верхнюю и нижнюю границу диапазона дат.Затем возьмите разницу между этими датами, чтобы определить количество дней между ними:

SELECT
    UPPER(daterange('2018-01-01', '2018-02-01')) -
        LOWER(daterange('2018-01-01', '2018-02-01')) AS diff;

31

Обратите внимание, что способ построения диапазона фактически идентичен этому:

daterange('2018-01-01', '2018-02-01', '[)')

То есть диапазон является исключительной верхней границей.В результате в подсчет включаются только 31 января января 2018 года, но 1 февраля исключается.Если вы вместо этого хотите включить и эту точку даты, вы можете использовать этот диапазон:

daterange('2018-01-01', '2018-02-01', '[]')

Выполнение вышеуказанного запроса приведет к подсчету дней 32.

0 голосов
/ 12 сентября 2018

Я считаю, что это должно работать:

SELECT DATE_PART('day', '2018-01-01'::timestamp - '2018-02-01'::timestamp);

[ПРАВИТЬ]

с использованием daterange, это будет работать:

SELECT upper(daterange('2018-01-01', '2018-02-01')) - lower(daterange('2018-01-01', '2018-02-01'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...