我的 table 是
From_Range ToRange
1 999
9000 10000
2000 5000
当我尝试插入范围值 1000 - 3000 时,它应该会失败,因为这个新范围内的某些值落在现有范围 2000 - 5000 之间。如何检查输入范围是否落在现有范围内?
最佳答案
找到重叠的最简单方法如下:
IF EXISTS (SELECT 1 FROM table WHERE @myValueLo <= ExistingRangeEnd AND @myValueHi >= ExistingRangeStart)
-- Overlaps
ELSE
-- Doesn't overlap
如果您将上面的条件与下图中的每个条形图进行比较,则可以证明这是有效的:
Existing range: |-------------------|
Overlaps: |-------------| |------------|
|----------------------------------|
|-------------|
Not overlaps: |-----| |----|
在所有重叠情况下,这两个测试都是正确的:
- 现有范围的开始日期始终早于新范围的结束日期
- 现有范围的结束日期晚于新范围的开始日期
那些不重叠的人无法通过此测试中的一项或多项。
关于sql - 查询以检查 SQL Server 中的重叠范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012099/