gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:57:18 25 4
gpt4 key购买 nike

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

表进程

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表明无论如何都需要基于游标的解决方案。

任何指针将不胜感激,即使它们只是更好的搜索字符串。 (谷歌搜索任何日期范围问题似乎需要一些技巧。)

最佳答案

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

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

更新:

如果日期在 DateProcessedEffectiveDays 内,我假设事件在给定日期被处理

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

关于c# - 查找给定日期是否在日期范围列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com