在Postgresql中计算日期之间的差异

12

我正在尝试查找表格中某些字段之间的时间差。但是因为我使用的是Postgresql,所以不能使用DATEDIFF函数,感到非常遗憾:((。我在网上找不到任何清晰的指南/教程来展示如何在Postgres中执行类似的操作,因此需要帮助以使用Postgresql提供的功能实现相同的操作。

如果我使用支持DATEDIFF函数的关系型数据库管理系统(RDBMS),那么我假设此查询将起作用,所以我的问题基本上是:如何更改此查询以便使用Postgresql提供的功能来使其起作用?

SELECT Question.ID, 
Question.Status, COUNT (qUpdate.ID)  AS NumberofUpdates,
DATEDIFF (Question.LoggedTime,MIN(qUpdate.UpdateTime)) AS TimeBeforeFirstUpdate,
DATEDIFF(Question.LoggedTime, MAX(qUpdate.UpdateTime)) AS TimeBeforeLastUpdate
FROM qUpdate
LEFT JOIN Question ON qUpdate.qID=Question.ID
WHERE Question.Status = 'closed' AND qUpdate.Update NOT NULL
GROUP BY Question.Status, Question.ID, Question.LoggedTime;

如果你需要更多信息或任何澄清,我会尽快回复。


3
Postgres非常丰富多功能。阅读手册真的很值得。 - Glenn
抱歉,我以前从未看过那个。从现在开始,我一定会去了解它的 :) - Jimmy
4个回答

12

1
我一直在为年龄函数苦苦挣扎 :/ - itsols

5
您可以使用age(<date1>, <date2>)函数(而不是DATEDIFF)来计算年龄。
以下是示例代码 -
SELECT Question.ID, 
Question.Status, COUNT (qUpdate.ID)  AS NumberofUpdates,
age(Question.LoggedTime,MIN(qUpdate.UpdateTime)) AS TimeBeforeFirstUpdate,
age(Question.LoggedTime, MAX(qUpdate.UpdateTime)) AS TimeBeforeLastUpdate
FROM qUpdate
LEFT JOIN Question ON qUpdate.qID=Question.ID
WHERE Question.Status = 'closed' AND qUpdate.Update NOT NULL
GROUP BY Question.Status, Question.ID, Question.LoggedTime;

注意,如果psql给出以下错误 - ERROR: date/time field value out of range,则需要选择适当的datestyle


4
SELECT extract(year from age('2014-01-23', '1985-08-27'));
-- returns 28 years, my current age.

0

这将给你以秒为单位的时间差:

select extract(epoch from to_date::timestamp - from_date::timestamp) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接