我需要找到两个日期内的所有日期。这通常会用
之间
,但我有一个 StartDate 和 en EndDate 列。这意味着日期实际上会持续几天。
所以一条记录可能有这样的值:
id、状态、开始日期、结束日期
如果我给查询提供两个日期,我如何找到这些日期内的所有行。
要获取完整记录期间位于请求期间内的记录:
SELECT *
FROM yourtable
WHERE startDate >= smallestDate AND
endDate <= largestDate;
要获取记录期间与请求期间相交的记录:
SELECT *
FROM yourtable
WHERE startDate <= largestDate AND
endDate >= smallestDate;
并且,为了完整起见,获取记录期的开始位于请求期的记录,但您不关心记录期的结束:
SELECT *
FROM yourtable
WHERE startDate BETWEEN smallestDate AND largestDate
反之亦然,对于记录期的结束日期:
SELECT *
FROM yourtable
WHERE endDate BETWEEN smallestDate AND largestDate
(当然,所有示例都假定startDate
总是小于endDate
。)