【问题标题】:Check Date renge found in between mysql startdate enddate column检查在mysql startdate enddate 列之间找到的日期renge
【发布时间】:2015-10-29 06:38:58
【问题描述】:

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

   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 ) );

提前致谢

【问题讨论】:

  • 如果您希望开始日期为 2015 年 10 月 16 日,结束日期为 2015 年 10 月 20 日,那么第三条记录将如何出现在您的结果中?

标签: php mysql sql .net database


【解决方案1】:

你写了相反的条件

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 ) );

【讨论】:

    【解决方案2】:

    我认为这应该可行

      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;
    

    我翻转了大于号和小于号。

    【讨论】:

      【解决方案3】:

      是否将和查询包装在括号内,以便查询将这些单独评估为 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 显示我的查询

      编辑:在最后两个日期条件附近发现缺少 ''。

      【讨论】:

        【解决方案4】:

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

        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' 将结果更改为内部连接

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多