我有一个PostgreSQL数据库,其中一个表快速增长(每个月左右几百万行),所以我想定期将该表的内容存档到一个单独的表中。
我打算使用cron作业每晚执行.sql文件,将所有超过一个月的行存档到另一个表中。
我的查询工作正常,但我需要知道如何动态创建一个月前的时间戳。
time
列以2013-10-27 06:53:12
格式存储,我需要知道在SQL查询中使用什么来构建恰好一个月前的时间戳。例如,如果今天是2013年10月27日,我希望查询匹配时间< 2013-09-27 00:00:00
答案 0 :(得分:36)
问题由IRC的一位朋友回答:
'now'::timestamp - '1 month'::interval
让时间戳返回00:00:00并不重要,所以这符合我的意图。
答案 1 :(得分:35)
select date_trunc('day', NOW() - interval '1 month')
此查询将在一个月前从现在开始返回日期,并将整个时间返回到00:00:00。
答案 2 :(得分: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天)大的日期,第二个子句将搜索小于当前月的第一天的日期( 00:00:00本月的第1天)。 这将包括上月日期中的所有结果。