【发布时间】:2018-01-11 06:23:56
【问题描述】:
我有一张包含文章信息的表格。我有一个published_at 列,即timestamp without time zone,我想计算每篇文章发表的时间(以天为单位)。
所以如果它是在一周前发布的,我应该回复7。
知道怎么做吗?
我知道 Postgres 有 NOW(),但我可以先减去然后再取 DAY() 吗?
谢谢!
【问题讨论】:
标签: postgresql
我有一张包含文章信息的表格。我有一个published_at 列,即timestamp without time zone,我想计算每篇文章发表的时间(以天为单位)。
所以如果它是在一周前发布的,我应该回复7。
知道怎么做吗?
我知道 Postgres 有 NOW(),但我可以先减去然后再取 DAY() 吗?
谢谢!
【问题讨论】:
标签: postgresql
你可以使用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)
【讨论】:
您可以从另一个日期减去一个日期,结果将是两个日期之间的天数。如果其中一个是时间戳,只需将其转换为日期:
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;
【讨论】: