PostgreSQL:如何计算PostgreSQL中的DATE差异?

时间:2014-07-24 09:17:55

标签: postgresql

这里我需要计算PostgreSQL中两个日期的差异。

在SQL Server中:就像我们在SQL Server中一样,它更容易。

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

我的尝试:我正在尝试使用以下脚本:

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

问题

  • 我的方法是否正确?

  • PostgreSQL中是否有任何函数来计算它?

4 个答案:

答案 0 :(得分:16)

您的计算对于DATE类型是正确的,但如果您的值是时间戳,则应该使用EXTRACT(或DATE_PART)以确保只获得 full days;

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

An SQLfiddle to test with。请注意,时间戳差异为1秒,少于2整天。

答案 1 :(得分:6)

将两个字段CAST到数据类型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

或者创建一个dateiff()函数:

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

答案 2 :(得分:3)

一种简单的方法是将日期转换为时间戳并取其差异,然后提取DAY部分。

如果您想要真正的区别

select extract(day from 'DATE_A'::timestamp - 'DATE_B':timestamp);

如果您想要绝对差异

select abs(extract(day from 'DATE_A'::timestamp - 'DATE_B':timestamp));

答案 3 :(得分:0)

这就是我通常这样做的方式。 B减去A的简单天数。

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