Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中获取一个月前的时间戳_Sql_Postgresql - Fatal编程技术网

在PostgreSQL中获取一个月前的时间戳

在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

我有一个PostgreSQL数据库,其中一个表快速增长,非常大(大约每月数百万行),因此我希望定期将该表的内容归档到一个单独的表中

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

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

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)