首页 > 解决方案 > 如何在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)

谁能帮我解决这个问题。

标签: sqlsql-serverdatetime

解决方案


根据您的反馈,您需要一个简单的日期重叠查询:

SELECT *
FROM t
WHERE @EndDate   > BeginDate
AND   @BeginDate < EndDate

它将匹配 Start 和 EndDate 以任何方式与 @Start 和 @EndDate 相交的行。它假定结束日期是唯一的。您可能想要添加(... OR EndDate IS NULL)以处理空值。


推荐阅读