检查在mysql startdate enddate列之间找到的日期renge

时间:2015-10-29 06:38:58

标签: php mysql sql .net database

在我的数据库中有两列和下面的数据

   StartDate      Enddate
   2015-10-01     2015-10-30
   2015-10-15     2015-11-15
   2015-09-15     2015-10-15

如果我用startdat搜索:2015-10-16 Enddate:2015-10-20比想要以上所有结果,请帮帮我

我的查询如下

Select * from campaign as c LEFT JOIN campaign_team as t ON c.campaign_id=t.campaign_id where t.user_id
  ='6' and 
(campaign_sdate BETWEEN '2015-10-16' AND '2015-10-20' or campaign_edate BETWEEN '2015-10-16' AND '2015-10-20'
 or ( campaign_sdate <= 2015-10-16 and campaign_edate >= 2015-10-20 ) );

提前致谢

4 个答案:

答案 0 :(得分:0)

你写了相反的条件

or ( campaign_sdate >= 2015-10-16 and campaign_edate <= 2015-10-20 ) );

在您使用时删除BETWEEN

最终查询,

Select * from campaign as c LEFT JOIN campaign_team as t ON c.campaign_id=t.campaign_id where t.user_id
='6' or ( campaign_sdate >= 2015-10-16 and campaign_edate <= 2015-10-20 ) );

答案 1 :(得分:0)

我认为这应该有用

  Select * from campaign as c LEFT JOIN campaign_team as t ON c.campaign_id=t.campaign_id where t.user_id ='6' and campaign_sdate >= 2015-10-16 and campaign_edate <= 2015-10-20;

我翻了大于号和小于号。

答案 2 :(得分:0)

在括号内包装和查询,以便查询将这些单独评估为OR部分工作:

Select * 
from campaign as c LEFT JOIN campaign_team as t ON c.campaign_id=t.campaign_id where t.user_id  ='6' 
                    and (
                          (campaign_sdate BETWEEN '2015-10-16' AND '2015-10-20' 
                          or campaign_edate BETWEEN '2015-10-16' AND '2015-10-20')

                    or ( campaign_sdate <= '2015-10-16' and campaign_edate >= '2015-10-20' ) );

Here is a SQL Fiddle显示我的查询

编辑:在最后两个日期条件下发现缺失'。

答案 3 :(得分:0)

如果第一个在第二个开始后结束并且第一个在第二个结束之前结束,则两个周期重叠:

Select * 
from campaign as c 
JOIN campaign_team as t 
ON c.campaign_id=t.campaign_id 
where t.user_id  ='6' 
    and campaign_sdate <= '2015-10-20'
    AND campaign_edate >= '2015-10-16' 

我删除了LEFT JOIN,因为where t.user_id ='6'无论如何都会将结果更改为内部联接