テーブルがあります: smallint フィールドに格納された日付の饗宴 (エレガントな方法ではない、私は知っています..)。次のようになります。
id - serial, PK
day - smallint NOT NULL,
month - smallint NOT NULL,
year - smallint
それは非常に単純に思えます-ある日付の記録がある場合、その日付にはある種の饗宴もあります。
アイデア全体を複雑にするのは「1つだけ」あります...フィールド「年」はnull可能です。「年」が null の場合、年とは関係なく、その日に移動可能な饗宴があることを意味します。(もちろん、日付用のフィールドを1つ作成し、ブールフラグ「is_movable」をいくつか作成できますが、問題は何も変わりません)。
指定された日付範囲のすべてのごちそうをリストする手順を作成したいと思います。
get_all_feasts(date_from date, date_to date)
..テーブルを返します: id、date、is_movable。
たとえば、データの場合:
id / day / month / year
1 / 12 / 05 / 2013
2 / 15 / 05 / 2013
3 / 16 / 02 / 2012
4 / 25 / 12 / NULL
5 / 26 / 12 / NULL
6 / 2 / 04 / 2014
..関数呼び出し: get_all_feasts('2012-03-01'::date, '2014-05-01'::date) は以下を返す必要があります:
id / date
4 / 2012-12-25
5 / 2012-12-26
1 / 2013-05-12
2 / 2013-05-15
4 / 2013-12-25
5 / 2013-12-26
6 / 2014-04-02
年月日を指定してごちそうを選んでも問題ありません。
しかし、特定の範囲で移動可能な饗宴の饗宴日を生成する方法は?
PostgreSQL v. 9.2 を使用しています。