这里我需要计算PostgreSQL中两个日期的差异。
在SQL Server中:就像我们在SQL Server中一样,它更容易。
DATEDIFF(Day, MIN(joindate), MAX(joindate)) AS DateDifference;
我的尝试:我正在尝试使用以下脚本:
(Max(joindate) - Min(joindate)) as DateDifference;
问题:
我的方法是否正确?
PostgreSQL中是否有任何函数来计算它?
答案 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