114

私はこのようなクエリを持っており、2つの指定された日付の間の一連の日付をうまく生成します:

select date '2004-03-07' + j - i as AllDate 
from generate_series(0, extract(doy from date '2004-03-07')::int - 1) as i,
     generate_series(0, extract(doy from date '2004-08-16')::int - 1) as j

2004-03-07との間で162の日付が生成され2004-08-16、これが必要です。このコードの問題は、2つの日付が異なる年のものである場合、たとえば、を試した場合など、正しい答えが得られないこと2007-02-01です2008-04-01

より良い解決策はありますか?

4

4 に答える 4

213

intとの間で変換せずに実行できます(ただし、代わりにタイムスタンプとの間で変換します)

SELECT date_trunc('day', dd):: date
FROM generate_series
        ( '2007-02-01'::timestamp 
        , '2008-04-01'::timestamp
        , '1 day'::interval) dd
        ;
于 2013-01-01T19:40:39.317 に答える
38

日付を使用してシリーズを直接生成できます。int やタイムスタンプを使用する必要はありません。

select date::date 
from generate_series(
  '2004-03-07'::date,
  '2004-08-16'::date,
  '1 day'::interval
) date;
于 2015-02-25T17:06:08.480 に答える