1

我正在查询以获取基于两个日期(开始日期和结束日期)的记录。

我需要获取的是跨越部分或全部给定期间的记录,换句话说,开始日期可能在参数日期之前但小于结束日期,或者在开始日期之后开始并在结束日期之后结束。

即开始日期 = 12 年 10 月 1 日和 12 年 10 月 31 日结束日期。我想捕获开始日期在 10 月 1 日之前但跨越此期间的记录,无论它是在 11 月还是 10 月中旬结束。以及 2012 年 10 月 1 日至 2012 年 10 月 31 日之间的记录。

实际上,我需要排除这个时期的记录,但首先需要确保我得到这个数据集是正确的。

4

1 回答 1

1

我从存储在 中的这个简单数据集开始MyTable,同时使用start_dateend_date作为日期/时间数据类型。

id start_date end_date
 1  9/29/2012 9/30/2012
 2  9/29/2012 10/2/2012
 3  9/29/2012 11/1/2012
 4  10/2/2012 11/1/2012
 5  11/1/2012 11/2/2012

运行下面的查询,并为and参数提供2012-10-01和,给我这个输出结果集。2012-10-31range_startrange_end

id start_date end_date
 2  9/29/2012 10/2/2012
 3  9/29/2012 11/1/2012
 4  10/2/2012 11/1/2012

如果这与您想要的不相似,请编辑您的问题,向我们展示一组简短的输入数据样本以及您希望从该样本中获得的输出。

另外,请注意 mystart_dateend_datevalues 的时间部分都是午夜。如果您的对应对象包括一天中的任何其他时间,您将需要修改查询以处理它们。

这是我使用的查询中的 SQL:

PARAMETERS range_start DateTime, range_end DateTime;
SELECT m.id, m.start_date, m.end_date
FROM MyTable AS m
WHERE
       m.start_date Between [range_start] And [range_end]
    OR m.end_date Between [range_start] And [range_end]
    OR (m.start_date<[range_start] AND m.end_date>[range_end]);
于 2012-10-17T16:07:59.897 回答