我在数据库表中有一组相当大的电话号码(大约200万个)。这些数字已插入到块中,因此存在许多连续的数字范围,范围从10个数字到1万个数字。其中一些号码正在使用中,因此标记为不可用,其余号码可用。给定一个特定的数字,我需要一种方法来查找该数字之上和之下的连续数字范围。范围应一直持续到找到不可用的数字或遇到两个范围的边界为止。
例如,给定以下设置:
1000 1001 1002 1010 1011 1012 1013 1020 1021 1022
使用1012作为参数进行搜索应返回1010、1011、1012、1013。
形成查询以查找这些范围的好方法是什么?我们在SQL Server上使用NHibernate,使用这两种方法都可以。
从理论上讲,集合中的项目没有特定的值,因此我假设您也有一些连续的ID列,这些列定义了数字的顺序。像这样的东西:
ID Number 1 1000 2 1001 3 1002 4 1010 5 1011 6 1012 7 1013 8 1020 9 1021 10 1022
您可以创建一个额外的列,其中包含以下结果Number - ID:
Number - ID
ID Number Diff 1 1000 999 2 1001 999 3 1002 999 4 1010 1006 5 1011 1006 6 1012 1006 7 1013 1006 8 1020 1012 9 1021 1012 10 1022 1012
相同范围内的数字在“差异”列中的结果相同。