小编典典

查询以检查SQL Server中的重叠范围?

sql

我有桌子

   From_Range      ToRange
   1                999
   9000             10000
   2000             5000

当我尝试插入范围值1000-3000时,它将失败,因为此新范围内的某些值落在现有范围2000-5000之间。如何检查输入范围是否落在现有范围内?


阅读 216

收藏
2021-03-17

共1个答案

小编典典

找到重叠的最简单方法是这样的:

IF EXISTS (SELECT 1 FROM table WHERE @myValueLo <= ExistingRangeEnd AND @myValueHi >= ExistingRangeStart)
  -- Overlaps
ELSE
  -- Doesn't overlap

如果将上面的条件与下图中的每个条形进行比较,这可以显示为有效:

Existing range:         |-------------------|
Overlaps:       |-------------|       |------------|
                |----------------------------------|
                           |-------------|
Not overlaps:   |-----|                       |----|

在所有重叠的情况下,这两个测试都是正确的:

  • 现有范围的 开始日期 总是早于新范围的 结束日期
  • 现有范围的 结束日期 在新范围的 开始日期 之后

那些不重叠的测试将通过一项或多项测试。

2021-03-17