MySQL查询-如何在一个条件下过滤多个列

MySQL查询-如何在一个条件下过滤多个列,mysql,sql,where-clause,Mysql,Sql,Where Clause,我正在寻找一种方法,使下面的查询更清晰、更简洁。在我的where子句中,我对满足相同条件的两个日期列进行筛选 select * from table where (colA between '2021-04-01' and '2021-04-03') # same date condition or (colB between '2021-04-01' and '2021-04-03') # same date condition 有没有更优雅的方法可以做到这一点?您的查询很好。但如果愿意

我正在寻找一种方法,使下面的查询更清晰、更简洁。在我的where子句中,我对满足相同条件的两个日期列进行筛选

select * 
from table 
where (colA between '2021-04-01' and '2021-04-03') # same date condition
or (colB between '2021-04-01' and '2021-04-03') # same date condition

有没有更优雅的方法可以做到这一点?

您的查询很好。但如果愿意,可以在子查询中定义常量:

select t.* 
from table t cross join
     (select '2021-04-01' as dt_start, '2021-04-03' as dt_end) params
where colA between dt_start and dt_end or   # same date condition
      colB between dt_start and dt_end      # same date condition

我对您当前的查询没有问题,事实上我建议您保持原样。考虑两条日期范围中的一个可能会发生变化的可能性,从而迫使你或你的代码继承者再次回复到这个版本。但是,假设
colA
和/或
colB
有一个时间组件,那么您的日期范围逻辑可能会有一个小问题。可能使用此版本:

选择*
从你的桌子上
其中colA>='2021-04-01'和colA<'2021-04-04'或
colB>='2021-04-01'和colB<'2021-04-04';
上述日期范围包括2021年4月1日至2021年4月3日,包括两端,但不包括2021年4月4日的全天