MySQL如何查询指定日期间隔内对应星期几的所有日期
MySQL 8.0 查询日期区间内指定星期的日期方案
实现逻辑
通过递归CTE生成fromDate到toDate之间的所有连续日期,再通过星期函数筛选符合要求的日期即可。
注:本方案适配你给出的星期参数规则:数值4对应周四、5对应周五,如需调整可自行修改星期计算逻辑。
完整查询代码
-- 如查询区间超过1000天,先执行这行修改递归深度限制,数值按需调整 -- SET cte_max_recursion_depth = 10000; WITH RECURSIVE date_range AS ( -- 替换为你的fromDate参数 SELECT DATE('2021-09-01 00:00:00') AS cur_date UNION ALL SELECT cur_date + INTERVAL 1 DAY FROM date_range -- 替换为你的toDate参数 WHERE cur_date < DATE('2021-09-30 00:00:00') ) SELECT cur_date AS 符合条件的日期 FROM date_range -- IN括号内替换为你的dayOfWeek参数集合 WHERE (WEEKDAY(cur_date) + 1) IN (4,5);
代码说明
WEEKDAY()函数原生返回规则:0=周一、1=周二、2=周三、3=周四、4=周五、5=周六、6=周日,加1后刚好匹配你给出的星期参数定义。- 如需使用原生
DAYOFWEEK()函数(返回规则:1=周日、2=周一、…、6=周五、7=周六),把WHERE条件替换为DAYOFWEEK(cur_date) IN (5,6)即可实现相同筛选效果。
示例输出(对应你给出的参数)
| 符合条件的日期 |
|---|
| 2021-09-02 |
| 2021-09-03 |
| 2021-09-09 |
| 2021-09-10 |
| 2021-09-16 |
| 2021-09-17 |
| 2021-09-23 |
| 2021-09-24 |
| 2021-09-30 |
内容的提问来源于stack exchange,提问作者Anshul Verma
相关产品推荐
相关产品推荐

