【问题标题】:DateTime overlap 3 datesDateTime 重叠 3 个日期
【发布时间】:2021-12-19 08:57:48
【问题描述】:

我正在尝试设置一种算法来检测多个日期之间的冲突。但我有一个问题如下:

我有在给定日期编程的块。我试图检测冲突。目标是不要同时看到两个以上的块

我尝试提出有两个以上冲突的情况。 我目前使用这种方法来查找两个日期之间的冲突:

Datestart <= @DateEndToTest AND DateEnd >= @DateStartToTest 

问题是我在一秒钟内有三个冲突。这是一个更好地解释它的图表:

如何避免在 00:00 检测到三个冲突?

提前致谢

问题是我总是同时出现三个冲突

B1 -> start: 2021-12-24 00:00:00 | end: 2021-12-25 00:00:00
B2 -> start: 2021-12-25 00:00:00 | end: 2021-12-26 00:00:00
B3 -> start: 2021-12-24 00:00:00 | end: 2021-12-26 00:00:00
(b3 covers b1 and b2)

在 2021-12-25 00:00:00 发生了三个冲突,但我不想检测到这个冲突。

【问题讨论】:

  • 您使用的是哪个 dbms? (当涉及到日期/时间时,许多产品远不符合 ANSI SQL..)
  • 向我们展示一些示例表数据和预期结果 - 全部为格式化文本(不是图像或链接)。minimal reproducible example
  • 对于 dbms 我使用 mssql
  • 强烈建议不要使用图片作为提供有用信息的手段。一个小图像的帮助也不少。您可能完全了解您的数据和您的目标,但没有其他人了解。您需要提供更多信息,这就是请求脚本的原因。并定义与您的样本数据相关的“检测冲突”——您的实际目标是什么以及您希望作为“输出”的是什么。请注意,您似乎只使用日期 - 所以如果不相关,请不要通过包含这些日期的时间来增加混淆。

标签: sql sql-server algorithm date


【解决方案1】:

要排除其中一项,您必须更改限制检查。

如果你不想要第一个:

[DateStart] <= @DateTimeEnd AND [DateEnd] > @DateTimeStart

如果你不想要第二个:

[DateStart] < @DateTimeEnd AND [DateEnd] >= @DateTimeStart

【讨论】:

  • 谢谢,但这并不能解决问题。我刚刚编辑了我的问题
  • 我假设你有三个冲突:B3 显然与 B1 和 B2 重叠。但是 B1 通过 = 检查与 B2 重叠。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多