PostgreSQL,检查相对于“今天”的日期


103

想知道是否有人可以协助一些Postgres。我有一个表,其中有一个称为mydatepostgres日期类型的列。我想做类似的事情:

SELECT * FROM MyTable WHERE mydate > [Today-1year]

我以前从未使用过Postgres,而且我敢肯定我只需要知道一些函数的名称-我会很高兴自己查找参考。谁能指出我正确的方向?

谢谢!


2
作为记录,文档在这里 -习惯了一些,但是非常全面。
基金莫妮卡的诉讼

Answers:


173
select * from mytable where mydate > now() - interval '1 year';

如果您只关心日期而不是时间,请替换current_datenow()


太棒了!谢谢
JustGage

1
请注意,这now()是一个时间戳记,因此此范围也将仅包含一年前的一天中的一部分以及今天的一天中的一部分。如果您想全天进行过滤,请now()::date按照Alex Howansky的建议进行转换。
tokenizer_fsj

1
@tokenizer_fsj current_date代替now()
Paul Tomblin

66

我认为这可以做到:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;

10
请注意,与不同interval '1 year',这不会考虑respect年。这可能不是您的担心,但是如果是这样,请使用我的答案。
Paul Tomblin

这应该是公认的答案。 now()返回一个时间戳记,因此在减去之后'1 day',您将得到一个时间戳记,该时间戳记可能会过滤掉您感兴趣的查询的一部分。大多数人希望在一整天中进行过滤,因此必须使用now()::dateCURRENT_DATE
tokenizer_fsj

9

这应该给您当前日期减去1年:

select now() - interval '1 year';

5

您也可以使用age()功能进行检查

select * from mytable where age( mydate, now() ) > '1 year';

age() 将返回一个间隔。

例如age( '2015-09-22', now() )将返回-1 years -7 days -10:56:18.274131

参见postgresql文档


我被告知age()是仅PostgreSQL的函数(2018-10-05)
loxaxs 18-10-5的

作为ID @loxaxs问题
hd1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.