Как рассчитать разницу в дате в PostgreSQL?
Здесь мне нужно вычислить разницу двух дат в PostgreSQL
.
В SQL Server: как мы делаем в SQL Server
, это намного проще.
DATEDIFF(Day, MIN(joindate), MAX(joindate)) AS DateDifference;
Моя попытка: я пытаюсь использовать следующий скрипт:
(Max(joindate) - Min(joindate)) as DateDifference;
Вопрос:
Ответы
Ответ 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