2012-04-08 110 views
9

我试图找出表格中某些字段之间的时间。但是因为我正在使用Postgresql :(()我无法使用DATEDIFF函数,我无法在网上找到任何明确的指南/教程,它显示了如何在Postgres中做类似的事情,所以我需要帮助同样的事情,但在Postgres的计算日期差异在Postgresql中

我假设这条查询,如果我是使用支持DATEDIFF函数所以基本上我的问题是如何才能改变这种做法,它的工作原理使用PostgreSQL提供功能RDBMS工作?

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 2012-04-08 19:56:33

+0

对不起,我以前从未见过。我一定会从现在开始看:) – Jimmy 2012-04-08 19:59:21

回答

3

可以使用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

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