一尘不染

在一组数字中查找连续范围

sql

我在数据库表中有一组相当大的电话号码(大约200万个)。这些数字已插入到块中,因此存在许多连续的数字范围,范围从10个数字到1万个数字。其中一些号码正在使用中,因此标记为不可用,其余号码可用。给定一个特定的数字,我需要一种方法来查找该数字之上和之下的连续数字范围。范围应一直持续到找到不可用的数字或遇到两个范围的边界为止。

例如,给定以下设置:

1000
1001
1002
1010
1011
1012
1013
1020
1021
1022

使用1012作为参数进行搜索应返回1010、1011、1012、1013。

形成查询以查找这些范围的好方法是什么?我们在SQL Server上使用NHibernate,使用这两种方法都可以。


阅读 195

收藏
2021-05-05

共1个答案

一尘不染

从理论上讲,集合中的项目没有特定的值,因此我假设您也有一些连续的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

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

相同范围内的数字在“差异”列中的结果相同。

2021-05-05