在Postgres中使用间隔中的可变周期
我有一个维护每月历史数据的关系。这些数据会在每个月的最后一天添加到表格中。我写的一项服务可以被称为指定一个月以及提前检索历史数据的月数。我通过创建startDate和endDate变量,然后在两者之间返回数据来做到这一点。我遇到的问题是startDate在endDate之前是可变的月数,我无法弄清楚如何在一个区间内使用可变周期。在Postgres中使用间隔中的可变周期
以下是我有:
DECLARE endDate TIMESTAMP := (DATE_TRUNC('MONTH',$2) + INTERVAL '1 MONTH') - INTERVAL '1 DAY';
startDate TIMESTAMP := endDate - INTERVAL $3 'MONTH';
我知道了的startDate行是不正确的。这是如何正确完成的?
回答:
使用此行:
startDate TIMESTAMP := endDate - ($3 || ' MONTH')::INTERVAL;
,并注意MONTH
之前的空间。 基本上:你可以像4 MONTH
一样构造一个字符串,并将其与::type
一起转换为适当的间隔。
编辑:我已经找到另一种解决办法:你可以用interval
这样计算:
startDate TIMESTAMP := endDate - $3 * INTERVAL '1 MONTH';
这看起来有点更好的给我。
回答:
此代码与您的情况没有直接关系,但它确实说明了如何在INTERVAL算术中使用变量。我的表名是“日历”。
CREATE OR REPLACE FUNCTION test_param(num_months integer) RETURNS SETOF calendar AS
$BODY$
select * from calendar
where cal_date <= '2008-12-31 00:00:00'
and cal_date > date '2008-12-31' - ($1 || ' month')::interval;
$BODY$
LANGUAGE sql VOLATILE
COST 100
ROWS 1000;
以上是 在Postgres中使用间隔中的可变周期 的全部内容, 来源链接: utcz.com/qa/258347.html