我试图找出表格中某些字段之间的时间。但是因为我正在使用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;
如果您需要更多信息或任何澄清,我会尽快回复。
答案 0 :(得分:12)
您不需要“datediff”功能。
只需减去两个日期:
Question.LoggedTime - MIN(qUpdate.UpdateTime)
如果您不知道,但所有在线记录的内容:
http://www.postgresql.org/docs/current/static/functions-datetime.html
答案 1 :(得分: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
。
答案 2 :(得分:3)
SELECT extract(year from age('2014-01-23', '1985-08-27'));
-- returns 28 years, my current age.