使用 PostgreSQL 查询获取当月的记录

Fetch records of current month using PostgreSQL query

假设我在 table

中有以下数据
id     createdAt
1      2021-02-26T06:29:03.482Z
2      2021-02-27T06:29:03.482Z
3      2021-03-14T06:29:03.482Z
4      2021-03-17T06:29:03.482Z

我要当月的数据。即,如果我在 3 月生成报告,我需要获取 3 月的结果,所以我们只需要来自 table.

的当月数据

想要的输出是

id     createdAt  
3      2021-03-14T06:29:03.482Z
4      2021-03-17T06:29:03.482Z

任何人都请帮忙。谢谢。

您可以使用 date_trunc():

select *
from the_table
where date_trunc('month', createdat) = date_trunc('month', current_timestamp);

date_trunc('month', ...) returns 这个月的第一天。

但是,上面无法使用 createdat 上的索引。要提高性能,请使用范围查询:

select *
from the_table
where createdat >= date_trunc('month', current_timestamp)
  and createdat < date_trunc('month', current_timestamp) + interval '1 month'

表达式 date_trunc('month', current_timestamp) + interval '1 month' returns 下一个 月的开始(这是与 < 进行比较的方式)

您可以将日期的月份和年份与当前日期进行比较。但是按字段索引不会用到,可以为此单独建一个按年按月的索引

select *
from your_table
where extract(YEAR FROM createdAt) = extract(YEAR FROM now())
      and extract(MONTH FROM createdAt) = extract(MONTH FROM now())