有效地创建日期

Dav*_*vis 1 postgresql query-optimization

Pavel的页面上有以下功能:

CREATE OR REPLACE FUNCTION makedate(year int, dayofyear int)
RETURNS date AS $$
SELECT (date '0001-01-01' + ($1 - 1) * interval '1 year' + ($2 - 1) * interval '1 day'):: date
$$ LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

我有以下代码:

makedate(y.year,1)
Run Code Online (Sandbox Code Playgroud)

PostgreSQL在给定年份的1月1日创建日期的最快方法是什么?

帕维尔的功能会让我相信它是:

date '0001-01-01' + y.year * interval '1 year' + interval '1 day';
Run Code Online (Sandbox Code Playgroud)

我的想法更像是:

to_date( y.year||'-1-1', 'YYYY-MM-DD');
Run Code Online (Sandbox Code Playgroud)

我正在寻找使用PostgreSQL 8.4的最快方式.(使用日期函数的查询可以选择100,000到100万条记录,因此需要速度.)

谢谢!

Dan*_*iel 7

我会使用以下内容,因为年份是持有年份的变量,而不是使用函数:

(year || '-01-01')::date
Run Code Online (Sandbox Code Playgroud)

顺便说一句.我无法相信这种转变是你的瓶颈.但也许你应该看看generate_series(我不知道你的用例).

select current_date + s.a as dates from generate_series(0,14,7) as s(a);
   dates
------------
 2004-02-05
 2004-02-12
 2004-02-19
(3 rows)
Run Code Online (Sandbox Code Playgroud)