在Postgresql中计算日期的差异

Jim*_*mmy 10 sql postgresql datediff

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

我假设如果我使用支持DATEDIFF函数的RDBMS,这个查询会有效,所以基本上我的问题是如何更改这个以便它使用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;
Run Code Online (Sandbox Code Playgroud)

如果您需要更多信息或任何澄清,我会尽快回应.

a_h*_*ame 12

您不需要"datediff"功能.

只需减去两个日期:

Question.LoggedTime - MIN(qUpdate.UpdateTime)
Run Code Online (Sandbox Code Playgroud)

如果您不知道,但所有在线记录的内容:http:
//www.postgresql.org/docs/current/static/functions-datetime.html


Pus*_*ade 5

您可以使用该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;
Run Code Online (Sandbox Code Playgroud)

注意,如果 psql 给你这个错误 - ERROR: date/time field value out of range,那么你需要选择一个合适的datestyle.