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()::date
或CURRENT_DATE
是必要的。以上是关于PostgreSQL,检查相对于“今天”的日期的主要内容,如果未能解决你的问题,请参考以下文章