在 PostgreSQL 视图中显示最近 3 个日历年的记录
Posted
技术标签:
【中文标题】在 PostgreSQL 视图中显示最近 3 个日历年的记录【英文标题】:Display last 3 calendar year records in PostgreSQL view 【发布时间】:2021-09-17 21:37:56 【问题描述】:我想在 Postgres 视图中显示超过 3 个日历年的记录。如果今天的日期是 2021 年 9 月 17 日,那么最后 3 个日历年是 2018 年。但我只需要考虑年份而不考虑日/月。所以最近 3 个日历年是 2018 年,我需要显示 01/01/2018 的记录。
我可以得到过去 3 年的
select * from table1 where datecolumn >= date_part('year', (now() - '3 year'::interval));
此查询显示 2018 年 9 月 17 日的记录。但我想显示 01/01/2018 的记录。
【问题讨论】:
【参考方案1】:仅使用日期函数的替代方法,避免隐式日期->双精度->字符串->日期转换。
select *
from table1
where datecolumn >= date_trunc('year', (now() - interval '3 years'))::date
【讨论】:
这很好用。谢谢!【参考方案2】:显然未经测试,但应该可以工作:
select
*
from
table1
where
datecolumn >=
('01/01/' || extract('year' from current_date))::date - interval '3 years';
【讨论】:
【参考方案3】:您可以将时间戳/日期列中的年份部分提取为整数并进行简单比较,例如:
WITH sample AS (
SELECT UNNEST(
ARRAY[
'2016-01-01',
'2017-12-12',
'2017-02-02',
'2018-03-03',
'2019-04-04',
'2020-05-05'
] )::TIMESTAMP AS datecolumn
)
SELECT datecolumn
FROM sample
WHERE DATE_PART('YEAR', datecolumn) >= DATE_PART('YEAR', CURRENT_DATE) - 3;
输出:
datecolumn
---------------------
2018-03-03 00:00:00
2019-04-04 00:00:00
2020-05-05 00:00:00
(3 rows)
【讨论】:
以上是关于在 PostgreSQL 视图中显示最近 3 个日历年的记录的主要内容,如果未能解决你的问题,请参考以下文章