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查询的错误
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)