使用sql获取数字列表之间缺少的数字

azz*_*zza 3 sql sql-server

在我的数据库中,我有10个用户号码,其中一些号码已被删除,当我在以下节目中选择列时:

missing_user_number:
        1,
        2,
        5,
        8,
        10,
Run Code Online (Sandbox Code Playgroud)

我需要知道是否有一个脚本可以得到这样的丢失数字,我不希望删除的数据,我只是希望丢失的数字作为整合数据:

missing_user_number:
        3,
        4,
        6,
        7,
        9,
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

在大多数SQL版本中,实际上更容易获得缺失值的范围,而不是每个缺失值:

select user_number + 1 as missing_range_start, next_user_number - 1 as missing_range_end
from (select t.*,
             lead(user_number) over (order by user_number) as next_user_number
      from t
     ) t
where user_number <> user_number + 1;
Run Code Online (Sandbox Code Playgroud)

注意:这只会找到内部缺失的数字,如问题中的示例所示.