【发布时间】:2010-11-20 21:46:03
【问题描述】:
我有一个需要不断处理的事件列表。该进程会处理该事件一段时间,然后它需要再次处理。这意味着,对于每个事件,我最终都会得到一个日期范围列表,在该列表中事件被“处理”,任何间隙都意味着该事件当时处于未处理状态。为此,我使用了两个表:
表进程
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 中运行它可能意味着对数据库的影响很大。另一方面,SQL 在查询方面通常更快。另一方面,this similar issue 表明无论如何都需要基于光标的解决方案。
任何指针都会受到赞赏,即使它们只是更好的搜索字符串。 (谷歌搜索任何日期范围问题似乎需要一些技巧。)
【问题讨论】:
-
什么编程语言?你还没说呢。
-
我用c#,但我想我可以翻译其他语言的回复。
-
能否请您提供一些您的数据库示例以及您想查询什么?
-
这样做了,并且会研究你的答案。
标签: c# sql date-range