3

namelocationstart_date、およびを含むテーブルがありますend_date。対応する行情報をそのまま維持しながら、日付範囲を含むこれらの行を個別の日付の行に変換しようとしています。

例:

Name1, Location1, 2015-4-01, 2015-4-04

なります:

Name1, Location1, 2015-4-01
Name1, Location1, 2015-4-02
Name1, Location1, 2015-4-03
Name1, Location1, 2015-4-04

PostgreSQL 関数を使用して、これを新しいテーブルとして作成する必要があると思います。

4

2 に答える 2

3

必要な 3 つの列を含む新しいテーブルを作成します。

CREATE TABLE new_tbl (
  nam    varchar,
  loc    varchar,
  dt     date);

新しいテーブルに1 日間隔で (包括的に) レコードを含める必要があるため、最も簡単な解決策は、日付からセットを生成することですstart_dateend_date

generate_series(start_date::timestamp, end_date::timestamp, '1 day')

INSERTこれは、新しいテーブルのステートメントに簡単に貼り付けることができます。

INSERT INTO new_tbl
  SELECT nam, loc, generate_series(start_date::timestamp, end_date::timestamp, '1 day')::date
  FROM old_tbl;

このgenerate_series関数はtimestampパラメータで動作するため、s を明示的にキャストしてからdate、生成されたtimestamps を s にキャストしてdate、列の定義と一致させる必要があります。

于 2015-05-03T02:51:04.573 に答える