2012-04-08 43 views
9

Sto cercando di scoprire l'intervallo di tempo tra determinati campi nelle mie tabelle. Tuttavia, sto usando Postgresql : (( Non riesco a utilizzare la funzione DATEDIFF. Non riesco a trovare guide chiare/tutorial sulla rete che mostra come fare una cosa simile in Postgres, quindi ho bisogno di aiuto per eseguire stessa cosa ma in PostgresCalcolo della differenza di date In Postgresql

sto assumendo questa query funzionerebbe se stavo usando un RDBMS che ha sostenuto la funzione DATEDIFF quindi fondamentalmente la mia domanda è come posso cambiare questo modo che funziona utilizzando le funzionalità fornite da 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; 

Se avete bisogno di ulteriori informazioni o eventuali chiarimenti ti responsd ASAP.

+3

Postgres è molto ricco di funzionalità. Vale veramente la pena leggere il manuale. – Glenn

+0

Mi spiace di non averlo mai visto prima. D'ora in poi cercherò di vederlo :) – Jimmy

risposta

3

È possibile utilizzare la funzione age(<date1>, <date2>) (invece di DATEDIFF) .

Questo dovrebbe funzionare -

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; 

nota, se psql si dà questo errore - ERROR: date/time field value out of range, allora si avrebbe bisogno di scegliere un appropriato datestyle.

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