Bel*_*zle 46 postgresql variables period intervals
我有一个维护月度历史数据的关系.此数据将在每月的最后一天添加到表中.然后可以调用我正在编写的服务,指定一个月前和几个月之前检索历史数据.我这样做是通过创建startDate和endDate变量,然后在两者之间返回数据.我遇到的问题是startDate是endDate之前的可变数月,我无法弄清楚如何在一个间隔中使用一个变量周期.
这是我有的:
DECLARE
endDate TIMESTAMP := (DATE_TRUNC('MONTH',$2) + INTERVAL '1 MONTH') - INTERVAL '1 DAY';
startDate TIMESTAMP := endDate - INTERVAL $3 'MONTH';
Run Code Online (Sandbox Code Playgroud)
我知道startDate的行不正确.这怎么做得好?
A.H*_*.H. 86
使用此行:
startDate TIMESTAMP := endDate - ($3 || ' MONTH')::INTERVAL;
Run Code Online (Sandbox Code Playgroud)
并记下之前的空间MONTH
.基本上:您使用like构造一个字符串4 MONTH
并将其::type
转换为适当的间隔.
编辑:我找到了另一个解决方案:您可以这样计算interval
:
startDate TIMESTAMP := endDate - $3 * INTERVAL '1 MONTH';
Run Code Online (Sandbox Code Playgroud)
这看起来对我来说有点好看.
此代码与您的情况没有任何直接关系,但它确实说明了如何在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;
Run Code Online (Sandbox Code Playgroud)