【问题标题】:How to get data between a range of dates in sql如何在sql中获取日期范围内的数据
【发布时间】:2019-10-08 09:26:03
【问题描述】:

我需要选择日期之间的记录:

如果我输入 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)

谁能帮我解决这个问题。

【问题讨论】:

  • 几个小时前有人问了一个非常相似的问题。看看能不能找到!
  • @Zhu Parethesis 问题。
  • 如果输入日期是 2019 年 1 月 4 日和 2019 年 3 月 1 日会怎样?
  • 如果输入日期是 2019 年 1 月 6 日和 2019 年 3 月 1 日会怎样?
  • 为什么要删除(和破坏)你的另一个问题,@Zhu,然后发布这个与上一个具有相同(低)细节量的问题?

标签: sql sql-server datetime


【解决方案1】:

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

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

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

【讨论】:

  • @larnu 我已经添加了说明。运营商对于独家结束日期是正确的,即 2019-02-31 13:41:00 表示事件恰好在 13:41:00 之前结束。
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多