我正在进行查询以根据两个日期,开始日期和结束日期获取记录。
我需要获取的是跨越部分或全部给定时间段的记录,换句话说,开始日期可能在参数日期之前但小于结束日期或在开始日期之后开始并在结束日期之后结束
即。开始日期= 10月12日结束日期和10月31日结束日期。我想捕获开始日期在10月1日之前的记录,但无论是在11月还是10月中旬结束,都将涵盖此期间。以及10月12日至10月31日之间的记录。
实际上我需要排除此期间的记录,但首先需要确保我的数据集正确无误。
答案 0 :(得分:1)
我从MyTable
中存储的这个简单数据集开始,start_date
和end_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
运行下面的查询,并为2012-10-01
和2012-10-31
参数提供range_start
和range_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
如果这与您想要的不相似,请编辑您的问题,以向我们展示一组简短的输入数据样本以及您希望从该样本中获得的输出。
另外,请注意我的start_date
和end_date
值的时间成分都是午夜。如果您的同行包括一天中的任何其他时间,您将需要修改查询以处理它们。
这是我使用的查询中的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]);