日期生成器
来自 PostgreSQL 维基
跳转到导航跳转到搜索作者 Scott Bailey 'Artacus'
在处理调度应用程序时,拥有日期关系(日期表)几乎是必不可少的。但是,有人质疑我为什么将它物化,因为 Postgres 可以使用返回集函数动态生成它。
一些测试表明,动态生成它与从磁盘读取的性能一样好,即使我过滤的所有部分都被分解并建立了索引。
CREATE OR REPLACE FUNCTION generate_dates(
dt1 date,
dt2 date,
n int
) RETURNS SETOF date AS
$$
SELECT $1 + i
FROM generate_series(0, $2 - $1, $3) i;
$$ LANGUAGE sql IMMUTABLE;
用法
-- Select even days in odd months
SELECT dt, to_char(dt, 'FMDAY, DD MON YYYY')
FROM generate_dates('2009-01-01', '2009-12-31', 1) dt
WHERE MOD(EXTRACT(MONTH FROM dt)::int,2) = 1 AND MOD(EXTRACT(DAY FROM dt)::int,2) = 0;
注意
PostgreSQL 8.4 提供了一个 generate_series(timestamptz, timestamptz, interval)
函数,它返回一个 timestamptz
集。