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

Posted

技术标签:

【中文标题】PostgreSQL,检查相对于“今天”的日期【英文标题】:PostgreSQL, checking date relative to "today" 【发布时间】:2011-04-25 02:55:40 【问题描述】:

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

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

我以前从未使用过 Postgres,我确信我只需要知道一些函数的名称——我很乐意自己查找参考资料。谁能指出我正确的方向?

谢谢!

【问题讨论】:

作为记录,文档是here——需要一点时间来适应,但它非常全面。 【参考方案1】:
select * from mytable where mydate > now() - interval '1 year';

如果您只关心日期而不关心时间,请将current_date 替换为now()

select * from mytable where mydate > current_date - interval '1 year';

【讨论】:

这太完美了!谢谢 请注意,now() 是一个时间戳,因此该范围也将仅包括一年前的部分时间和今天的部分时间。如果您想全天过滤,请按照 Alex Howansky 的建议投射 now()::date @tokenizer_fsj 使用 current_date 而不是 now() current_date() 不适用于我(postgres 12.1),但 now()::date 是。 @niid 是current_date,不带括号。 postgresql.org/docs/current/…【参考方案2】:

您也可以使用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 documentation

【讨论】:

我被告知 age() 是一个仅限 PostgreSQL 的函数 (2018-10-05) 问题@loxaxs【参考方案3】:

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

select now() - interval '1 year';

【讨论】:

【参考方案4】:

我认为这样做可以:

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

【讨论】:

请注意,与interval '1 year' 不同,这不会考虑闰年。这可能不是您关心的问题,但如果是,请使用我的答案。 这应该是公认的答案。 now() 返回一个时间戳,因此在减去 '1 day' 之后,您最终会得到一个时间戳,该时间戳可能会过滤掉您有兴趣查询的部分时间。大多数人希望在一整天内进行过滤,因此使用now()::dateCURRENT_DATE 是必要的。

以上是关于PostgreSQL,检查相对于“今天”的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何从Postgresql中的工作日编号中获取日期名称?

从 PostgreSQL 中的字段中提取数字

检查 postgresql 的返回查询中是不是存在值

相对于当前日期对 Java 集合进行排序

如何设置像'YYYYMM'这样的Postgresql默认值日期戳?

赛码 #1649 日期倒计时