2012-04-08 25 views
9

Próbuję ustalić czas między określonymi polami w moich tabelach. Jednak ponieważ używam Postgresql : (( Nie mogę użyć funkcji DATEDIFF.Nie mogę znaleźć żadnych wyraźnych przewodników/tutoriali w sieci, który pokazuje, jak zrobić coś podobnego w Postgres, więc potrzebuję pomocy w to samo, ale w PostgreSQLObliczanie różnicy dat W Postgresql

jestem zakładając ta kwerenda będzie działać gdybym był przy użyciu RDBMS że obsługiwanej funkcji DateDiff więc w zasadzie moje pytanie brzmi: w jaki sposób mogę to zmienić, tak to działa przy użyciu funkcji oferowanych przez 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; 

Jeśli potrzebujesz więcej informacji lub wyjaśnień, odpowiem najszybciej jak to jest.

+3

Postgres jest bardzo funkcjonalny. Naprawdę warto przeczytać instrukcję. – Glenn

+0

Przepraszam, że nigdy wcześniej tego nie pokazywano. Zdecydowanie zamierzam na to teraz spojrzeć :) – Jimmy

Odpowiedz

3

Można użyć funkcji age(<date1>, <date2>) (zamiast DATEDIFF) .

to powinno działać -

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; 

Uwaga, jeśli psql daje ten błąd - ERROR: date/time field value out of range, wtedy musiałby wybrać odpowiedni datestyle.

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