PostgreSQLで連続する日付をgenerate_seriesで追加する方法

PostgreSQLで連続する日付を追加

以下のような日付テーブルがあったとします。

CREATE TABLE 日付テーブル (
    id integer DEFAULT nextval('"日付テーブル_id_seq"'::regclass) PRIMARY KEY,
    日付 date NOT NULL,
    備考 text
);

これにINSERT INTOで 2025-01-01 から 2025-01-31 まで入力したい場合はINSERT INTOを使用して1つずつ追加する必要があります。

INSERT INTO 日付テーブル (日付, 備考) 
VALUES 
  ('2025-01-01', NULL),
  ('2025-01-02', NULL),
  -- 中略
  ('2025-01-30', NULL),
  ('2025-01-31', NULL);

MySQLだとINSERT INTOのVALUESがたくさん必要になりますが、PostgreSQLだと連続する日付をgenerate_series()で生成できるので短いコードで済みます。

INSERT INTO 日付テーブル (日付, 備考)
SELECT 日付, NULL
FROM generate_series('2025-01-01'::DATE, '2025-01-31'::DATE, '1 day'::INTERVAL) AS 日付;

後者のほうがいつからいつまでの日付かひと目でわかるので、連続する日付などのレコードを追加する場合はgenerate_series()を使用したほうが良いです。

カテゴリーsql