【问题标题】:mySQL date ranges intersection, how to compare?mySQL 日期范围交集,如何比较?
【发布时间】:2014-02-20 23:44:33
【问题描述】:

(我在这里找到了解决方案的逻辑:Determine Whether Two Date Ranges Overlap

表结构为:

contracts[start_date, end_date] 

我的表单使用两个输入,inp_start_dateinp_end_date。我想使用它们的值来选择范围内的合同。

示例(伪):

  1. 合同在其 start_date 到 end_date 之间有效。
  2. 获取从 inp_start_date 到 inp_end_date 之间的所有有效合同

为此查询设置条件的最佳方法是什么?


编辑

示例:
如果我的inp_start_date is 5/21/2005
inp_end_date is 9/21/2005
然后它将选择在 inp_start_date 和 inp_end_date 之前和之后开始和结束的合同,只要它在该时间范围内有效,甚至部分有效。

查询将查找其日期范围与 inp_start 和 inp_end 日期范围相交的所有合同。

合同和输入示例:

contract.start_date = 1.1.2001  |#|  contract.end_date = 5.31.2001
input.start_date = 10.21.2000   |#|  input.end_date = 2001.3.21

这个合约应该被捕获,因为它至少有一部分在范围内。

【问题讨论】:

  • 这个问题到底是关于什么的?你知道如何以任何方式做到这一点吗?这是2列与AND的基本比较。
  • 日期可以像其他任何东西一样进行比较。使用<>BETWEEN。如果您在实施时遇到问题,请通过更具体的问题告诉我们,我们可以为您提供帮助。
  • 请重新阅读我的问题.. 这不是一个单一的日期!一个范围内。这是一个范围内的范围。请检查编辑。

标签: mysql date date-range


【解决方案1】:

假设您正在验证输入并且格式正确,您可以尝试使用 BETWEEN clause>=<= 运算符:

SELECT id 
FROM contracts
WHERE start_date >= <inp_start_date> AND end_date <= <inp_end_date>

【讨论】:

    猜你喜欢
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多