使用 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())
假设我在 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())