gpt4 book ai didi

SQL WHERE 日期范围查询

转载 作者:行者123 更新时间:2023-12-01 11:03:35 25 4
gpt4 key购买 nike

在我的表中,我有 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 查询有问题

enter image description here

最佳答案

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com