You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL获取本周及未来3周(共4周)的全部记录?

解决方案

原SQL写法在跨年、跨月场景下会出现逻辑漏洞,且无法直接覆盖未来3周的范围,推荐用日期范围判断的方式实现需求,优先选择unix时间戳直接比较的版本以提升查询性能。

高性能版(推荐)

直接通过unix时间戳计算范围,无需对每条记录调用日期转换函数,可利用date字段的索引优化查询:

SELECT *, FROM_UNIXTIME(date) as time
FROM `events`
WHERE date >= UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY))
  AND date < UNIX_TIMESTAMP(DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 4 WEEK))

易读版(日期字段比较)

若不考虑索引性能,也可以直接用转换后的日期字段做判断:

SELECT *, FROM_UNIXTIME(date) as time
FROM `events`
WHERE FROM_UNIXTIME(date) >= DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY)
  AND FROM_UNIXTIME(date) < DATE_ADD(DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), INTERVAL 4 WEEK)

关键说明

  1. 一周起始日调整:
    • 上述代码默认以周一为一周第一天(WEEKDAY()返回0=周一,6=周日)。
    • 若系统以周日为一周起始,将WEEKDAY(CURDATE())替换为DAYOFWEEK(CURDATE()) - 1即可(DAYOFWEEK()返回1=周日,2=周一)。
  2. 范围逻辑:
    • DATE_SUB(CURDATE(), ...)获取本周第一天的00:00:00时间点。
    • DATE_ADD(..., INTERVAL 4 WEEK)获取第5周的第一天,用<而非<=可自动包含第4周的最后一秒(23:59:59),避免时间边界的判断误差。

内容的提问来源于stack exchange,提问作者Pedro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:20:25