sql - 检索当前月份内具有日期范围的数据
问题描述
我有这张表Event
,它有startDate
和endDate
列
我只想获取当前月份发生的事件。
如果我有一个从 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。
解决方案
如果您想要在特定月份处于活动状态的事件(无论它们何时开始或结束),您需要开始日期在下个月开始之前并且结束日期在所需月份开始或之后的事件:
DECLARE @MonthStart date = '20190901';
SELECT *
FROM dbo.[Event] E
WHERE E.StartDate < DATEADD(DAY, 1, EOMONTH(@MonthStart))
AND E.EndDate >= @MonthStart;
推荐阅读
- r - 使用条件从另一行中减去一行
- jenkins - 用于 Kubernetes 和 Jenkins 上的 Typescript 项目的 SonarQube 扫描仪
- php - 如何在codeigniter中创建命名会话以在后台隔离curl请求
- php - 为 Beanstalkd 使用 BASH 脚本工作者
- javascript - (节点:3340)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“get”
- java - 如何从stackbuilder启动父活动而不重新创建它?
- c++ - 使用 boost::property_tree 自动失败?
- python - Pydruid对同一个德鲁伊查询的多个查询
- python - 使用鼻子测试时出现“没有这样的文件或目录”错误
- list - 如何在 DART 中将 MAP 转换为 LIST?