11

我试图找出表格中某些字段之间的时间。但是因为我使用的是 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;

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

4

4 回答 4

12

您不需要“datediff”功能。

只需减去两个日期:

Question.LoggedTime - MIN(qUpdate.UpdateTime)

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

于 2012-04-08T19:47:49.687 回答
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.

于 2012-04-08T19:54:10.467 回答
3
SELECT extract(year from age('2014-01-23', '1985-08-27'));
-- returns 28 years, my current age.
于 2014-01-23T13:22:51.860 回答
0

这会给你以秒为单位的时间差异:

select extract(epoch from to_date::timestamp - from_date::timestamp) 
于 2021-10-12T21:56:39.490 回答