MySQL:如何查询包含指定月份的出行日期区间记录
MySQL 查询指定月份内有出行记录的人员
要匹配所有出行区间与指定月份有交集的记录(包括完全覆盖该月份的情况),核心是判断两个时间区间是否重叠:目标月份的区间是2024-06-01至2024-06-30,出行区间是departure_date至return_date,只要两个区间有重叠就需要被筛选出来。
对应的SQL查询语句如下:
SELECT name, departure_date, return_date FROM departures WHERE departure_date <= '2024-06-30' AND return_date >= '2024-06-01';
条件说明
departure_date <= '2024-06-30':确保出行的开始时间不晚于目标月份的最后一天,排除那些在7月及之后才出发的记录。return_date >= '2024-06-01':确保出行的结束时间不早于目标月份的第一天,排除那些在5月及之前就结束的记录。
这两个条件组合后,就能覆盖所有符合要求的场景:
- 出发和返回都在2024年6月内
- 出发在5月、返回在6月
- 出发在6月、返回在7月
- 出发在5月、返回在7月(完全覆盖6月)
如果需要适配动态月份(比如传入参数),可以用日期函数自动生成目标月份的首尾日期,示例如下(以2024年6月为例):
SELECT name, departure_date, return_date FROM departures WHERE departure_date <= LAST_DAY('2024-06-01') AND return_date >= DATE_FORMAT('2024-06-01', '%Y-%m-01');
内容的提问来源于stack exchange,提问作者GigiF
相关产品推荐
相关产品推荐

