作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的表中,我有 118 条详细记录项目。我在这里关心的 2 个字段是开始日期和结束日期。
我需要从该 View 生成一份报告,其中显示哪些项目在以下日期范围内处于“事件”状态:
2011 年 1 月 1 日 - 2011 年 1 月 12 日
我尝试了以下 WHERE 类:
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'
结果似乎不正确,只显示了一些记录,而我知道事实上应该显示的许多记录却没有显示,例如一个项目的开始日期为 20/07/2011,结束日期为 21/11/2011 在运行 WHERE 查询时消失。
谁能看出这个 WHERE 查询有问题
最佳答案
WHERE
startdate <= '2011-12-01'
AND enddate >= '2011-01-01'
(假设 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!)
这在逻辑上绝对需要一个 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'
但是您的示例永远不会满足最后一个 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')
关于SQL WHERE 日期范围查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8358064/
我是一名优秀的程序员,十分优秀!