You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何筛选上月数据及指定日期的记录

针对你提出的两个PostgreSQL数据筛选问题,我整理了实用的解决方法,一起来看看:


问题1:如何在PostgreSQL中筛选上月的数据?

在PostgreSQL里筛选上月数据,有几种灵活的写法,适配不同场景:

  • 方法一:用date_trunc()精准匹配
    这个函数能把日期截断到指定精度(比如月份),直接锁定上月的时间范围。假设你的日期列是created_at(timestamp/date类型),SQL语句如下:
SELECT *
FROM your_table
WHERE date_trunc('month', created_at) = date_trunc('month', current_date - interval '1 month');

解释:date_trunc('month', current_date - interval '1 month')会生成上月第一天的零点时间,这个条件会匹配所有在上月范围内的记录,不管具体时分秒。

  • 方法二:明确指定上月起止范围
    如果需要更清晰的时间边界,用“大于等于上月第一天,小于当月第一天”的逻辑更稳妥,避免时分秒导致的遗漏:
SELECT *
FROM your_table
WHERE created_at >= date_trunc('month', current_date - interval '1 month')
  AND created_at < date_trunc('month', current_date);
  • 方法三:针对纯日期列的简化写法
    如果你的列是date类型(无时分秒),可以通过提取年、月来匹配:
SELECT *
FROM your_table
WHERE EXTRACT(YEAR FROM created_at) = EXTRACT(YEAR FROM current_date - interval '1 month')
  AND EXTRACT(MONTH FROM created_at) = EXTRACT(MONTH FROM current_date - interval '1 month');

问题2:如何输出所有日期为Monday, January 29, 2018 12:00 AM的记录?

需要根据你的日期列存储类型来选择写法:

情况1:日期列是timestamp/date类型

如果是标准的日期/时间戳类型,把目标字符串转换成对应类型后匹配即可:

SELECT *
FROM your_table
WHERE date_col = TO_TIMESTAMP('Monday, January 29, 2018 12:00 AM', 'FMDay, FMMonth DD, YYYY HH12:MI AM');

或者更简单——因为这个时间对应2018-01-29 00:00:00,直接写:

SELECT *
FROM your_table
WHERE date_col = '2018-01-29 00:00:00'::timestamp;

情况2:日期列是字符串类型(不推荐,但可处理)

如果日期是以字符串形式存储的,直接匹配字符串内容:

SELECT *
FROM your_table
WHERE date_col = 'Monday, January 29, 2018 12:00 AM';

⚠️ 提示:尽量把日期存储成date或timestamp类型,不仅查询更高效,还能避免字符串格式不一致引发的错误。


内容的提问来源于stack exchange,提问作者tsarenkotxt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:33:48