2016-07-12 40 views
2

假设我想查找6月涉及的所有记录!WHERE声明查找一个月内的所有记录?

----------------------------------------------------------- 
CaseID StartDate EndDate 
1  2016-05-31 2016-06-01 
2  2016-02-29 2016-06-20 
3  2016-03-21 2016-06-01 
4  2016-05-05 2016-06-01 
5  2016-05-20 2016-07-01 
6  2016-05-12 2016-12-31 

SELECT CaseID, StartDate, EndDate 
FROM ServiceCase 
WHERE((StartDate > '2016-05-31' and StartDate < '2016-07-01') or (EndDate > 
'2016-05-31' and EndDate < '2016-07-01')) 

但我不能搜索CaseID 6的记录,我岂是逻辑错了吗?

+4

简单,记录6与您的标准不符。由于开始和结束日期都不是在六月份。 –

+0

@RobbyCornelissen我怎样才能使这个声明可以搜索项目6? – Fabre

+0

您提供了我认为您不应该的条件的开始日期,因为它严格检查开始日期应该大于2016-05-31,但您的开始日期2016-05-12早于此日期 – Rupal

回答

4

好像你要选择的是六月份期间,所有进行中的案件。如果是这样,那么这些都是4种可能的方案:

enter image description here

或者,换句话说,该案件将不得不七月前两个

  • 启动;和
  • 结束后即可

因此,查询将基本上是这样的:

SELECT CaseID, StartDate, EndDate 
FROM ServiceCase 
WHERE 
    StartDate < '2016-07-01' AND EndDate > '2016-05-31' 

输出:SQL fiddle

+0

Downvoter,请评论。 –

+0

结束后可能会是六月,七月,八月......十二月也,他只想在这里单月6月的纪录 – Rupal

+0

@Rupal不,OP要在六月份有“涉案”的情况。这个问题明确指出,案例6应该是输出的一部分。 –

0

尝试如下所述:

SELECT CaseID, StartDate, EndDate 
FROM ServiceCase 
WHERE(StartDate < '2016-07-01' and EndDate > '2016-05-31') 
+0

您的查询会高兴地输出即使在一月份开始和结束的案例。 –

+0

您更新后的查询仍然没有作为结果集的一部分的情况6。 –

+0

同意,但我仍然不确定他是否希望甚至不属于六月的记录,因为我在你的答案中写了评论,它也会给出六月后的记录。纠正我,如果我错了 – Rupal

0

你可以尝试MySQL的MONTH()功能;示例代码六月

为波纹管月
SELECT CaseID, StartDate, EndDate 
    FROM ServiceCase 
WHERE MONTH(StartDate) = 6 
    OR MONTH(EndDate) = 6 
    OR (MONTH(StartDate) < 6 AND MONTH(EndDate) > 6) 

注:这只是一个不考虑性能比较部分选项。

+0

** @DownVoter **你能解释为什么吗? –

相关问题