SQL WHERE查询日期范围

Jso*_*ham 3 sql sql-server syntax where-clause reporting-services

在我的表中,我有118条记录细节项目.我关注的两个字段是startdate和enddate.

我需要从这个视图中生成一个报告,该报告显示哪些项目在以下日期范围之间"活跃":

01/01/2011 - 01/12/2011

我尝试过以下WHERE clase:

WHERE startdate BETWEEN '01/04/2011' AND '01/12/2011' 
OR enddate BETWEEN '01/04/2011' AND '01/12/2011'
OR startdate <= '01/04/2011' AND enddate >= '01/12/2011'
Run Code Online (Sandbox Code Playgroud)

什么通过似乎不正确,只显示了一些记录,并且我知道的事实应该显示的很多,例如一个项目的开始日期为20/07/2011,结束日期为21/11 /运行WHERE查询时,2011年消失.

任何人都可以看到此WHERE查询的错误

在此输入图像描述

Mat*_*lie 5

WHERE
    startdate <= '2011-12-01'
AND enddate   >= '2011-01-01'
Run Code Online (Sandbox Code Playgroud)

(假设enddate中的值是项目活动的最后日期)

使用数字的示例,搜索重叠100到200的任何内容......

Start | End | Start <= 200 | End >= 100

 000  | 099 |  Yes         | No
 101  | 199 |  Yes         | Yes     (HIT!)
 201  | 299 |  No          | Yes
 000  | 150 |  Yes         | Yes     (HIT!)
 150  | 300 |  Yes         | Yes     (HIT!)
 000  | 300 |  Yes         | Yes     (HIT!)
Run Code Online (Sandbox Code Playgroud)

这绝对需要逻辑中的AND :)


就你的查询而言......

您的括号查询,看起来像这样......

WHERE
  (
     startdate BETWEEN '01/04/2011' AND '01/12/2011'
  OR enddate   BETWEEN '01/04/2011' AND '01/12/2011'
  OR startdate <= '01/04/2011'
  )
  AND enddate >= '01/12/2011'
Run Code Online (Sandbox Code Playgroud)

但是你的例子永远不会满足最后的AND条件.尝试添加括号以更明确...

WHERE
     (startdate BETWEEN '01/04/2011' AND '01/12/2011')
  OR (enddate   BETWEEN '01/04/2011' AND '01/12/2011')
  OR (startdate <= '01/04/2011' AND enddate >= '01/12/2011')
Run Code Online (Sandbox Code Playgroud)