我需要从具有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 |
例如:如果一个条目有 starts_on = '2012/02/02' 和 ends_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 过滤,我希望不退回该项目