sql - 如何在sql中获取日期范围内的数据
问题描述
我需要在日期之间选择记录:
如果我将 BeginDate 输入为 5/Jan/2019 18:40:00 并将 EndDate 输入为 25/Jan/2019 18:40:00,则必须选择这两行。
另一个例子……记录的 BeginDate 和 EndDate 分别是 1/Jan/2019 和 31/Jan/2019。如果我输入 2019 年 1 月 5 日和 2019 年 1 月 25 日,则必须选择该记录。
想想如果我在应该选择的记录的实际开始日期和结束日期之间输入任何日期。
我使用了 between,但它选择了具有确切日期值的记录。
BeginDate >= @BeginDate
and BeginDate <= dateadd(day, 1, @EndDate)
and (EndDate is null or EndDate> @EndDate)
谁能帮我解决这个问题。
解决方案
根据您的反馈,您需要一个简单的日期重叠查询:
SELECT *
FROM t
WHERE @EndDate > BeginDate
AND @BeginDate < EndDate
它将匹配 Start 和 EndDate 以任何方式与 @Start 和 @EndDate 相交的行。它假定结束日期是唯一的。您可能想要添加(... OR EndDate IS NULL)
以处理空值。
推荐阅读
- android - 编辑正在运行的应用程序中存在的共享首选项条目
- wordpress - 在没有 CDN 的 Wordpress 插件中包含 Vue.js 组件
- batch-file - 从批处理启动应用程序会杀死整个 Windows 脚本
- python - Python中的正则表达式:无法匹配重复的组号
- c# - Asp.Net Core PageStart.cshtml 替代方案?
- javascript - “HTMLElement”类型上不存在属性“值”
- python - 为什么不显示 ValueError
- php - 为什么在没有点击 ajax 提交/验证功能的情况下进行提交
- google-app-engine - 从 Cloud Tasks 启动时,Node App Engine 任务已超过截止日期
- c++ - 为类提供模板如何解决无效的 constexpr 依赖项?C++