在PostgreSQL中获取一个月前的时间戳
我有一个PostgreSQL数据库,其中一个表快速增长,非常大(大约每月数百万行),因此我希望定期将该表的内容归档到一个单独的表中 我打算使用cron作业每晚执行一个.sql文件,将所有超过一个月的行归档到另一个表中 我的查询工作正常,但我需要知道如何动态创建一个月前的时间戳在PostgreSQL中获取一个月前的时间戳,sql,postgresql,Sql,Postgresql,我有一个PostgreSQL数据库,其中一个表快速增长,非常大(大约每月数百万行),因此我希望定期将该表的内容归档到一个单独的表中 我打算使用cron作业每晚执行一个.sql文件,将所有超过一个月的行归档到另一个表中 我的查询工作正常,但我需要知道如何动态创建一个月前的时间戳 time列的存储格式为2013-10-27 06:53:12,我需要知道在SQL查询中使用什么来构建正好一个月前的时间戳。例如,如果今天是2013年10月27日,我希望查询匹配时间2013-09-27 00:00:00 s
time
列的存储格式为2013-10-27 06:53:12
,我需要知道在SQL查询中使用什么来构建正好一个月前的时间戳。例如,如果今天是2013年10月27日,我希望查询匹配时间2013-09-27 00:00:00
select date_trunc('day', NOW() - interval '1 month')
此查询将返回一个月前的日期(从现在开始)和整点时间到00:00:00。问题由IRC中的一位朋友回答:
'now'::时间戳-“1个月”::间隔
让时间戳返回00:00:00并不十分重要,因此这符合我的意图。当需要查询上个月的数据时,则需要查询月份值为(current_month-1)的相应日期列
选择*
来自{table_name}
其中{column\u name}>=日期(月份),当前日期间隔为“1”个月)
和{column_name}
where子句的第一个条件将搜索大于上月第一天(上个月的00:00:00第1天)的日期,第二个条件将搜索小于当月第一天(本月的00:00:00第1天)的日期。
这将包括日期位于上个月的所有结果。“时间列以格式2013-10-27 06:53:12存储”-您应该使用格式字符串,而不是格式字符串,因为这将使类似的事情变得更加简单和高效。“30天”比“一个月”和“正好一个月”更精确基本上没有意义。在SQL中,如果从2013-03-28、03-29、03-30和03-31中减去整整一个月,则得到相同的答案:2013-02-28。这有关系吗?@IMSoP不幸的是,我无法控制数据库结构。我正在运行一个Quassel IRC内核,积压工作表中有1800万行导致客户端加载非常缓慢,因此我需要归档除最近的行之外的所有行,以保持客户端的稳定性;根据问题的措辞,实际列有一个字符串,因此您需要将其转换为比较:
WHERE cast(“time”作为时间戳)
DateTime函数:
SELECT *
FROM {table_name}
WHERE {column_name} >= date_trunc('month', current_date-interval '1' month)
AND {column_name} < date_trunc('month', current_date)