2012-04-08 107 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.