使用mysql查询介于其他两个日期之间的日期

使用mysql查询介于其他两个日期之间的日期,mysql,Mysql,我有一个表,它有一个字段“开始日期”和一个字段“结束日期”。当当前日期介于“开始日期”和“结束日期”之间时,项目被视为处于活动状态。我如何找到在未来30天内被视为活动的所有项目。假设开始日期和结束日期是日期时间,并且要比较日期和时间组件,可以执行以下操作: 选择一个* 来自atable a 其中a.start_date>=NOW() 和a.end_date=date(NOW()) 还有a.end_date在之前开始,现在开始,并将在未来30天内运行的项目呢?@koala_dev:很好。我添加了

我有一个表,它有一个字段“开始日期”和一个字段“结束日期”。当当前日期介于“开始日期”和“结束日期”之间时,项目被视为处于活动状态。我如何找到在未来30天内被视为活动的所有项目。

假设
开始日期
结束日期
是日期时间,并且要比较日期和时间组件,可以执行以下操作:

选择一个*
来自atable a
其中a.start_date>=NOW()
和a.end_date=date(NOW())

还有a.end_date在
之前开始,现在开始,并将在未来30天内运行的项目呢?@koala_dev:很好。我添加了一个可能的案例的粗略说明,并添加了一个谓词(WHERE子句),该谓词应满足要求。+1 Nice-work@spencer7593。我认为您的更新正是OP解决问题所需的。您能否更清楚地了解您需要什么,是整个30天内处于活动状态的项目,还是30天内处于活动状态的所有项目(无论持续时间如何)?
SELECT a.*
  FROM atable a
 WHERE a.start_date >= NOW()
   AND a.end_date   <= NOW() + INTERVAL 30 DAYS
SELECT a.*
  FROM atable a
 WHERE a.start_date >= DATE(NOW())
   AND a.end_date   <= DATE(NOW()) + INTERVAL 30 DAYS
      NOW     NOW+30
<--->  |       |              case 1: end_date < NOW()
   <---|---->  |              case 2: NOW() between start_date and end_date
    <--|-------|---->         case 3: NOW() > start_date and NOW+30 < end_date
       | <---> |              case 4: both start_date and end_date between NOW() and NOW()+30
       |    <--|--->          case 5: start_date between NOW() and NOW()+30 and end_date > NOW+30 
       |       |  <--->       case 6: start_date > NOW()+30


   <--->       |              case e1: end_date = NOW()
    <--|------->              case e2: start_date > NOW() AND end_date = NOW()+30
       <--->   |              case e3: start_date = NOW() and end_date < NOW()+30
       <------->              case e4: start_date = NOW() and end_date = NOW()+30
       <-------|-->           case e5: start_date = NOW() and end_date > NOW()+30
       |   <--->              case e6: start_date > NOW() AND end_date = NOW()+30
       |       <--->          case e7: start_date = NOW()+30
  WHERE NOT ( end_date < NOW() OR start_date > NOW() + INTERVAL 30 DAYS )
  WHERE NOT ( end_date < DATE(NOW()) OR start_date > DATE(NOW()) + INTERVAL 30 DAYS )
 WHERE NOT ( a < n OR b > t )
 WHERE ( a >= n AND b <= t )
 WHERE end_date >= NOW() AND start_date <= NOW() + INTERVAL 30 DAYS