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

标签 sql sql-server sql-server-2008

我的 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/

相关文章:

sql - 如何查找一年前这一天的数据?

sql - 将错误行发送到其他表

sql - Access VBA 中的 UNION 查询

php - 返回重复结果 SQL?

sql - 将包含类似 XML 数据的 varchar 列按行解析

sql-server-2008 - 什么数据大小适合在 SQL 服务器中存储 RFID 列?

sql - SQL将登录名映射到现有用户

mysql - 仅从所有结果中选择最近的记录,其中 username = x?

sql - 使用 JOIN 更新表

sql-server - Redis 作为 RDBMS 的缓存