starts_on
フィールドとフィールドを持つテーブルから選択する必要がありends_on
ます。
これらのオブジェクトをフィルタリングして取得するには、開始日と終了日を渡す必要があります。
現時点では機能しており、次のものを使用しています。
SELECT * FROM ***
WHERE ((starts_on >= START_DATE AND starts_on <= END_DATE) OR
(ends_on >= START_DATE AND ends_on <= END_DATE) OR
(starts_on <= END_DATE AND ends_on >= END_DATE))
ORDER BY starts_on, id
少し面倒に見えますが、単純化する簡単な方法がわかりません。何か案が?
Postgres 9.1 を dbms として使用しています。
編集:
starts_on | timestamp without time zone |
ends_on | timestamp without time zone |
例: 1 つのエントリに starts_on = '2012/02/02' と end_on '2012/02/05' がある場合、次の動作が必要です。
- 開始日 2012/01/01 と終了日 2012/03/01 でフィルターすると、商品を返品したい
- 開始日 2012/02/04 と終了日 2012/03/01 でフィルターすると、商品を返品したい
- 開始日 2012/02/05 と終了日 2012/03/01 でフィルターすると、商品を返品したい
- 開始日 2012/02/04 と終了日 2012/02/04 でフィルターすると、商品を返品したい
- 開始日 2012/02/06 と終了日 2012/03/01 でフィルターをかけた場合、アイテムが返品されないようにしたい
- 開始日 2012/01/01 と終了日 2012/02/01 でフィルターすると、アイテムが返されないようにしたい