首页 > 解决方案 > 检索当前月份内具有日期范围的数据

问题描述

我有这张表Event,它有startDateendDate

我只想获取当前月份发生的事件。

如果我有一个从 2019 年 8 月 29 日到 2019 年 9 月 1 日的事件,并且我想检索 9 月的所有事件,则该事件应该在结果中。(该事件也应该出现在 8 月的结果中)

此外,请考虑事件何时跨越另一年。

我试过这个查询:

SELECT EventTitle AS 'Event Name'
    ,CompleteAddress AS 'Location'
    ,UserId AS 'Event Creator'
FROM Event
WHERE
Month(StartDate) = Month(getdate()) 
AND Year(StartDate) = Year(getdate()) 

但这仅考虑 startDate。

标签: sqlsql-server

解决方案


如果您想要在特定月份处于活动状态的事件(无论它们何时开始或结束),您需要开始日期在下个月开始之前并且结束日期在所需月份开始或之后的事件:

DECLARE @MonthStart date = '20190901';

SELECT *
FROM dbo.[Event] E
WHERE E.StartDate < DATEADD(DAY, 1, EOMONTH(@MonthStart))
  AND E.EndDate >= @MonthStart;

DB<>小提琴


推荐阅读