(我在这里找到了解决方案的逻辑:Determine Whether Two Date Ranges Overlap)
表结构是:
contracts[start_date, end_date]
我的表单使用两个输入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
应该抓住这份合同,因为至少有一部分属于合同范围。
答案 0 :(得分:1)
假设您正在验证输入并且输入的格式正确,您可以尝试BETWEEN
clause或>=
和<=
运算符:
SELECT id
FROM contracts
WHERE start_date >= <inp_start_date> AND end_date <= <inp_end_date>