use*_*980 6 sql postgresql plpgsql
我正在尝试自动运行PLPGSQL一系列日期的函数的过程.
通常,我必须运行以下代码,每个函数调用每天生成一个表:
SELECT dhcp.singleday('2012-11-24'::date, '2012-11-25'::date);
SELECT dhcp.singleday('2012-11-25'::date, '2012-11-26'::date);
SELECT dhcp.singleday('2012-11-26'::date, '2012-11-27'::date);
SELECT dhcp.singleday('2012-11-27'::date, '2012-11-28'::date);
SELECT dhcp.singleday('2012-11-28'::date, '2012-11-29'::date);
SELECT dhcp.singleday('2012-11-29'::date, '2012-11-30'::date);
SELECT dhcp.singleday('2012-11-30'::date, '2012-12-01'::date);
SELECT dhcp.singleday('2012-12-01'::date, '2012-12-02'::date);
SELECT dhcp.singleday('2012-12-02'::date, '2012-12-03'::date);
SELECT dhcp.singleday('2012-12-03'::date, '2012-12-04'::date);
Run Code Online (Sandbox Code Playgroud)
有一个很好的方法可以通过一个简单的循环或函数自动化这种事情来处理任意日期范围吗?
我认为可能很难处理每个月的情况,所以我认为假设日期范围是一个月更好.
Clo*_*eto 18
不需要功能:
select dhcp.singleday(a::date, a::date + 1)
from generate_series(
'2012-11-24'::date,
'2012-12-03',
'1 day'
) s(a)
Run Code Online (Sandbox Code Playgroud)
这适用于任何日期范围.不仅是一个月内.
简单的 plpgsql 函数:
CREATE OR REPLACE FUNCTION f_machine_gun_sally(date, date)
RETURNS void AS
$func$
DECLARE
d date := $1;
BEGIN
LOOP
PERFORM dhcp.singleday(d, d+1);
d := d + 1;
EXIT WHEN d > $2;
END LOOP;
END
$func$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
PERFORM时,你想不关心的返回值。integera添加到 adate即可增加。以这种方式,月份或年份边界是无关紧要的。| 归档时间: |
|
| 查看次数: |
9113 次 |
| 最近记录: |