Answers:
select * from mytable where mydate > now() - interval '1 year';
如果您只关心日期而不是时间,请替换current_date
为now()
now()
是一个时间戳记,因此此范围也将仅包含一年前的一天中的一部分以及今天的一天中的一部分。如果您想全天进行过滤,请now()::date
按照Alex Howansky的建议进行转换。
current_date
代替now()
我认为这可以做到:
SELECT * FROM MyTable WHERE mydate > now()::date - 365;
interval '1 year'
,这不会考虑respect年。这可能不是您的担心,但是如果是这样,请使用我的答案。
now()
返回一个时间戳记,因此在减去之后'1 day'
,您将得到一个时间戳记,该时间戳记可能会过滤掉您感兴趣的查询的一部分。大多数人希望在一整天中进行过滤,因此必须使用now()::date
或CURRENT_DATE
。
您也可以使用age()
功能进行检查
select * from mytable where age( mydate, now() ) > '1 year';
age()
将返回一个间隔。
例如age( '2015-09-22', now() )
将返回-1 years -7 days -10:56:18.274131
age()
是仅PostgreSQL的函数(2018-10-05)