46

我有一个 PostgreSQL 数据库,其中一个表快速增长得非常大(每月大约几百万行),所以我想定期将该表的内容归档到一个单独的表中。

我打算使用 cron 作业每晚执行一个 .sql 文件,以将所有超过一个月的行存档到另一个表中。

我的查询工作正常,但我需要知道如何动态创建一个月前的时间戳。

time列以格式存储2013-10-27 06:53:12,我需要知道在 SQL 查询中使用什么来构建恰好一个月前的时间戳。例如,如果今天是 2013 年 10 月 27 日,我希望查询匹配时间 <2013-09-27 00:00:00

4

3 回答 3

74

IRC的一位朋友回答了这个问题:

'now'::timestamp - '1 month'::interval

让时间戳返回 00:00:00 并不是很重要,所以这符合我的意图。

于 2013-10-29T04:41:43.790 回答
56
select date_trunc('day', NOW() - interval '1 month')

此查询将返回从现在开始一个月前的日期,并将时间返回到 00:00:00。

于 2013-10-27T07:06:24.227 回答
0

当您需要查询上个月的数据时,您需要查询月份值为(current_month-1)的相应日期列。

SELECT * 
FROM {table_name}
WHERE {column_name} >= date_trunc('month', current_date-interval '1' month)
    AND {column_name} < date_trunc('month', current_date)

where 子句的第一个条件将搜索大于上个月第一天(00:00:00 上个月第 1 天)的日期,第二个子句将搜索小于当月第一天(00:00)的日期:00 本月的第 1 天)。这将包括日期在上个月的所有结果。

于 2020-02-27T04:58:09.230 回答