查找给定日期是否在日期范围列表中

时间:2009-08-19 10:39:34

标签: c# sql date-range

我有一个需要不断处理的事件列表。该过程将事件处理一段时间,因此需要再次处理。这意味着,对于每个事件,我最终会得到一个日期范围列表,其中事件被“处理”,任何间隙都意味着事件当时处于未处理状态。为此,我使用两个表:

表格流程

ProcessID int PK NOT NULL  
EffectiveDays int NOT NULL

表格处理

EventID nvarchar(128) NOT NULL  
ProcessID int FK REFERENCES Processes NOT NULL  
DateProcessed int NOT NULL

EventID是基于SQL查询的结果以标准方式动态生成的,以确保它在运行期间保持不变。

我希望能够使用此签名实现一个方法(有时需要在循环中调用它):

bool Event.WasProcessed(DateTime AsOf)

我需要能够在给定日期查询事件所处的状态(已处理或未处理)。所以我需要找出所提供的日期是否在任何日期范围之一(可以重叠)。

我甚至不确定是在SQL还是代码中运行此查询。查询有时需要在一系列任意事件上运行(每个事件由一个保存事件的对象和一个处理列表代表),因此在SQL中运行它可能意味着要点击DB。另外,SQL通常在查询时更快。另一方面,this similar issue表明无论如何都需要基于游标的解决方案。

任何指针都会受到赞赏,即使它们只是更好的搜索字符串。 (谷歌搜索任何日期范围问题似乎需要一些技巧。)

1 个答案:

答案 0 :(得分:0)

查询任何给定日期的事件状态:

SELECT  TOP 1 eventState
FROM    processing
WHERE   eventId = @id
        AND processingDate <= GETDATE()
ORDER BY
        processingDate DESC

<强>更新

如果日期在processed EffectiveDays之内,我认为某个日期的事件为DateProcessed

SELECT  p.ProcessID
FROM    Processings pi
LEFT JOIN
        Processes p
ON      p.ProcessID = pi.ProcessID
        AND p.EffectiveDays >= @date - pi.DateProcessed
WHERE   pi.EventID = @EventID
        AND pi.DateProcessed <= @date