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

如何查询当前月内开展的Event表事件?兼容跨月跨年场景

解决跨月/跨年的当月事件查询问题

我来帮你搞定这个跨月事件查询的痛点!你的核心需求是找出所有和当前月存在时间重叠的事件,而之前的查询只盯着StartDate的年月,自然会漏掉那些跨月甚至跨年的事件——比如8月29日开始、9月1日结束的活动,查9月时就会被错误排除。

核心思路:判断时间区间的重叠

要满足需求,我们只需要确认:事件的时间范围[StartDate, EndDate]和当前月的时间范围[当月第一天, 当月最后一天]存在交集。判断两个区间[A,B]和[C,D]有交集的通用条件是:

A <= D 并且 B >= C

对应到我们的场景,就是:

  • 事件的StartDate 不晚于当前月的最后一天
  • 事件的EndDate 不早于当前月的第一天

SQL Server 实现代码

结合你用到的getdate()(SQL Server 语法),我们可以用EOMONTH函数快速获取当月的边界日期,代码简洁还兼容跨年场景:

SELECT 
    EventTitle AS 'Event Name',
    CompleteAddress AS 'Location',
    UserId AS 'Event Creator'
FROM Event
WHERE 
    StartDate <= EOMONTH(GETDATE())  -- 事件开始时间不晚于当月最后一天
    AND EndDate >= DATEADD(DAY, 1, EOMONTH(GETDATE(), -1))  -- 事件结束时间不早于当月第一天

代码细节解释

  1. EOMONTH(GETDATE()):直接返回当前月的最后一天(比如当前是2019年9月,就返回2019-09-30)
  2. DATEADD(DAY, 1, EOMONTH(GETDATE(), -1)):先获取上个月的最后一天,再加1天得到当前月的第一天(比如当前是2019年9月,上个月最后一天是2019-08-31,加1天就是2019-09-01)

验证关键场景

  • 对于2019-08-29到2019-09-01的事件:
    • 查询8月时,事件EndDate(2019-09-01) >= 2019-08-01且StartDate(2019-08-29) <= 2019-08-31,符合条件,会被纳入8月结果。
    • 查询9月时,事件StartDate(2019-08-29) <= 2019-09-30且EndDate(2019-09-01) >= 2019-09-01,符合条件,会被纳入9月结果。
  • 跨年场景(比如2023-12-25到2024-01-05的事件):
    • 查询2023年12月时条件成立,会被纳入;查询2024年1月时同样满足条件,也会被纳入。

这样就完全覆盖了你需要的所有场景啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:42:39