Как рассчитать разницу в дате в PostgreSQL?

Здесь мне нужно вычислить разницу двух дат в PostgreSQL.

В SQL Server: как мы делаем в SQL Server, это намного проще.

DATEDIFF(Day, MIN(joindate), MAX(joindate)) AS DateDifference;

Моя попытка: я пытаюсь использовать следующий скрипт:

(Max(joindate) - Min(joindate)) as DateDifference;

Вопрос:

  • Правильный ли мой метод?

  • Есть ли какая-либо функция в PostgreSQL для вычисления этого?

Ответ 1

Ваши вычисления верны для типов DATE, но если ваши значения являются отметками времени, вы, вероятно, должны использовать EXTRACT (или DATE_PART) не забудьте получить только разницу в полные дни;

EXTRACT(DAY FROM MAX(joindate)-MIN(joindate)) AS DateDifference

SQLfiddle для тестирования с. Обратите внимание, что временная отметка составляет 1 секунду менее 2 полных дней.

Ответ 2

CAST оба поля в datatype DATE, и вы можете использовать минус:

(CAST(MAX(joindate) AS date) - CAST(MIN(joindate) AS date)) as DateDifference

Тестовый пример:

SELECT  (CAST(MAX(joindate) AS date) - CAST(MIN(joindate) AS date)) as DateDifference
FROM 
    generate_series('2014-01-01'::timestamp, '2014-02-01'::timestamp, interval '1 hour') g(joindate);

Результат: 31

Или создайте функцию lateiff():

CREATE OR REPLACE FUNCTION datediff(timestamp, timestamp) 
RETURNS int 
LANGUAGE sql 
AS
$$
    SELECT CAST($1 AS date) - CAST($2 AS date) as DateDifference
$$;

Ответ 3

Вот как я обычно это делаю. Простое число дней перспективы Б минус А.

DATE_PART('day', MAX(joindate) - MIN(joindate)) as date_diff