当前位置: 首页 > 面试题库 >

MySQL检查两个日期范围是否与输入重叠

汪辰阳
2023-03-14
问题内容

我需要检查数据库中是否还有两个日期和另外两个日期。

我的数据库看起来像这样

+----+--------------+------------+------------+
| id | code         | StartDate  | EndDate    |
+----+--------------+------------+------------+
|  1 | KUVX-21-40   | 2013-10-23 | 2013-11-22 |
|  2 | UEXA286-1273 | 2013-10-30 | 2013-11-29 |
|  3 | UAJFAU-2817  | 2013-10-21 | 2013-11-20 |
|  4 | KUVX-21-40   | 2013-10-30 | 2013-11-29 |
+----+--------------+------------+------------+

在我的查询中,我指定范围:开始日期和结束日期让我们对其进行如下分配:

ScopeStartDate = "2013-10-1"
ScopeEndDate = "2013-11-26"

上面应该归还我所有的记录,因为所有的时间都超过了时间跨度。

但是我无法使查询工作:/

我已经尝试了以下查询,但是没有运气:

WHERE
(
    (StartDate < ScopeStartDate AND StartDate > ScopeStartDate)
    OR
    (StartDate > ScopeStartDate  AND EndDate < ScopeEndDate )
)

这将返回两个结果: 1和3

我究竟做错了什么?


问题答案:

我相信以下条件会匹配所有可能的重叠情况。

WHERE
(
    (ScopeStartDate <= EndDate AND ScopeEndDate >= StartDate)

)

除非您声明了非逻辑时间跨度(例如,在开始之前结束的时间跨度)



 类似资料:
  • 问题内容: 该表用于存储会话(事件): 我们不想在范围之间产生冲突。 假设我们需要在 2010-01-05 至 2010-01-25之间 插入一个新会话。 我们想知道有冲突的会话。 这是我的查询: 结果如下: 有没有更好的方法来做到这一点? 小提琴 问题答案: 我曾经用日历应用程序进行过这样的查询。我想我使用了这样的东西: 更新 这肯定应该工作((ns,ne,es,ee)=(new_start,n

  • 我的Java外汇应用程序处理工作时间。我在两个日期字段中有工作开始和结束时间。我成功地计算了两个日期之间的差异时间;但是现在我如何检查结果是在晚上还是白天的范围内???一天从6点开始,到22点结束。例如,有人在凌晨3点到晚上11点之间工作。下面是我如何计算总工作小时数的。 我们有可以工作到晚上10点以上的工人,工资也不一样。如果他们在晚上10点以后工作,他们将获得特殊报酬。我们在工作结束时付款。他

  • 问题内容: 我有两个日期范围,(start1,end1)::: >> date1 &&(start2,end2)::: >> date2。 我想检查两个日期是否为OverLaped。 我的流程图 假定“ <> =”运算符对于比较是有效的。 } 任何建议将不胜感激。 问题答案: 您可以为此使用Joda-Time。 它提供指定开始时刻和结束时刻的类,并可以检查与的重叠。 就像是 版画 因为第一个间隔的

  • 问题内容: 如果我在表中有2个日期列,并且。如何返回给定日期介于这两个日期之间的行?例如: 如果给定的日期是 它应该返回以下行 来自以下各行: sql可能吗? 我正在使用sql server 2008。 问题答案: 使用SQL Server,它实际上非常简单:

  • 问题内容: 如果有和,如何检查用户给出的日期是否在该范围内? 例如 目前日期是字符串,将它们转换为时间戳整数是否有帮助? 问题答案: 使用strtotime将它们转换为时间戳是正确的方法,例如

  • 问题内容: 我的数据库中有以下一组匹配日期的日期(dd / MM / yyyy): 事件具有开始和结束日期(时间无关紧要),并且endDate为NULL表示事件仍在进行中。 我想确定的是两个任意日期之间的日期范围,其中a)没有事件,b)事件重叠。 因此,对于输入日期范围01/04/2009-30/06/2009,我希望得到以下结果: 注意,作为结果,两个相邻的重叠范围是可以接受的。 谁能用SQL算