如何使用SQL筛选即将到来的周末活动?
筛选即将到来的周末活动的SQL方案
要筛选出与即将到来的周末(默认周六、周日)有时间重叠的活动,你可以通过计算出即将到来的周末的起止日期,再用活动的startdate和enddate与这个时间范围做交集判断,具体SQL语句如下:
SELECT * FROM your_table WHERE -- 活动结束日期不早于即将到来的周六 enddate >= DATE_ADD(CURDATE(), INTERVAL (7 - DAYOFWEEK(CURDATE())) DAY) AND -- 活动开始日期不晚于即将到来的周日 startdate <= DATE_ADD(CURDATE(), INTERVAL (7 - DAYOFWEEK(CURDATE()) + 1) DAY);
逻辑说明
- 计算即将到来的周六:
DATE_ADD(CURDATE(), INTERVAL (7 - DAYOFWEEK(CURDATE())) DAY)DAYOFWEEK()函数返回值:1=周日,2=周一……7=周六- 若今天是周日,会计算出下周六;若今天是周一到周五,计算出本周六;若今天是周六,直接返回当天
- 计算即将到来的周日:在周六的基础上加1天即可
- 交集判断:只要活动的结束日期不早于周六,且开始日期不晚于周日,就说明该活动与即将到来的周末有重叠,符合筛选要求
注意事项
- 如果你的日期字段是
DATETIME类型(带时间),可以用DATE(startdate)和DATE(enddate)来截断时间部分,避免时间细节影响判断 - 若你的“周末”定义不同(比如周五+周六),只需调整计算周末日期的间隔天数即可
内容的提问来源于stack exchange,提问作者Nijn
相关产品推荐
相关产品推荐

