Вопрос по postgresql, sql – Расчет разницы дат в Postgresql

10

Я пытаюсь выяснить время между определенными полями в моих таблицах. Однако я использую Postgresql.:(( Я не могу использовать функцию DATEDIFF. Я не могу найти каких-либо четких руководств / руководств в сети, которые показывают, как сделать подобное в Postgres, поэтому мне нужна помощь, чтобы сделать то же самое, но в Postgres

Я предполагаю, что этот запрос будет работать, если я использую СУБД, которая поддерживает функцию DATEDIFF, поэтому в основном мой вопрос заключается в том, как я могу изменить это, чтобы он работал, используя функции, предоставляемые 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;

Если вам нужна дополнительная информация или какие-либо разъяснения, я отвечу как можно скорее.

Postgres очень многофункциональный. Это действительно стоит прочитать руководство. Glenn
Извините, мне никогда не показывали этого раньше. Я определенно собираюсь посмотреть на это отныне :) Jimmy

Ваш Ответ

3   ответа
12

Просто вычтите две даты:

Question.LoggedTime - MIN(qUpdate.UpdateTime)

В случае, если вы не знаете, но все, что задокументировано в Интернете:
http://www.postgresql.org/docs/current/static/functions-datetime.html

И все это время я боролся с функцией возраста: /
3
SELECT extract(year from age('2014-01-23', '1985-08-27'));
-- returns 28 years, my current age.
4

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.

Похожие вопросы