mySQL日期范围交集,如何比较?

时间:2014-02-20 23:44:34

标签: mysql date date-range

(我在这里找到了解决方案的逻辑: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
  3. 为此查询设置条件的最佳方法是什么?


    修改

    示例:
    如果我的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
    

    应该抓住这份合同,因为至少有一部分属于合同范围。

1 个答案:

答案 0 :(得分:1)

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

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