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