【问题标题】:Calculating difference of dates In Postgresql在 Postgresql 中计算日期的差异
【发布时间】:2012-04-21 09:27:47
【问题描述】:

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

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

【问题讨论】:

  • Postgres 功能非常丰富。确实值得通读手册。
  • 对不起,我以前从未见过。从现在开始,我肯定会看看这个:)

标签: sql postgresql datediff


【解决方案1】:

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

select extract(epoch from to_date::timestamp - from_date::timestamp) 

【讨论】:

    【解决方案2】:

    您不需要“datediff”函数。

    只需减去两个日期:

    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

      【讨论】:

        猜你喜欢
        • 2014-09-15
        • 1970-01-01
        • 2015-01-13
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 2012-12-13
        相关资源
        最近更新 更多