【问题标题】:Postgres: Get number of days since datePostgres:获取自日期以来的天数
【发布时间】:2018-01-11 06:23:56
【问题描述】:

我有一张包含文章信息的表格。我有一个published_at 列,即timestamp without time zone,我想计算每篇文章发表的时间(以天为单位)。

所以如果它是在一周前发布的,我应该回复7。

知道怎么做吗?

我知道 Postgres 有 NOW(),但我可以先减去然后再取 DAY() 吗?

谢谢!

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    你可以使用date_trunc,例如:

    t=# select date_trunc('day',now() - '2016-01-01'::date);
     date_trunc
    ------------
     580 days
    (1 row)
    

    或者对于数字结果,extract

    t=# select extract('day' from date_trunc('day',now() - '2016-01-01'::date));
     date_part
    -----------
           580
    (1 row)
    

    【讨论】:

      【解决方案2】:

      您可以从另一个日期减去一个日期,结果将是两个日期之间的天数。如果其中一个是时间戳,只需将其转换为日期:

      select current_date - published_at::date
      from your_table;
      

      如果你想得到那些小于 7 天的,你可以使用:

      select current_date - published_at::date as age_in_days
      from your_table
      where published_at >= current_date - 7;
      

      【讨论】:

        【解决方案3】:

        您还应该能够使用这些略有不同的版本。

        SELECT
            NOW() - published_at, -- returns X days hh:mm:ss...
            EXTRACT(DAY FROM NOW() - published_at), -- returns difference in days
            CURRENT_DATE - published_at -- returns difference in days
        ;
        
        • 更多信息here 了解使用/不使用时间戳进行操作的潜在影响
        • 一个旧的thread 报告NOW() 与CURRENT_DATE 的潜在性能影响

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-21
          • 2018-10-10
          • 1970-01-01
          • 2013-03-16
          • 1970-01-01
          相关资源
          最近更新 更多