SQL 取出某个表序列号中不连续的数字

本文介绍了一种使用SQL查询来检测数据库表中序列号是否连续的方法。通过自定义的SQL语句,结合RowNumber()函数和辅助数字表,可以找出序列中的断号及其数量,适用于SQL Server 2008 R2及以上版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL 取出某个表序列号中不连续的数字

SQL来源 :https://bbs.youkuaiyun.com/topics/390998839

WITH table1(A) as (SELECT cast( xx as integer) FROM [dbo].[xxxxx] where xx like'010209%')
,t AS (
    SELECT A,
           ROW_NUMBER() OVER(ORDER BY A) rn
      FROM table1
)
,r AS ( -- 求出缺少的起始数和个数
    SELECT t1.A + 1 s,
           t2.A - t1.A - 1 n
      FROM t t1
      JOIN t t2
        ON t2.rn = t1.rn + 1
       AND t2.A > t1.A + 1
)
SELECT r.s + n.number A
  FROM r
  JOIN (SELECT *
          FROM master..spt_values
         WHERE type='P'
       ) n
    ON n.number < r.n

SQL语句中使用到了RowNumber()
Row_Number() over ([<partition_by_clause>] <order_by_clause>)
其中
Row_Number() 起到了编号的作用
partition_by 使相同的数据进行分组
order_by 使数据按照一定的顺序排列

还用到了 master…spt_values

这个在网上查询是属于SqlServer2008R2以上的数字辅助表,主要由

namenumbertypelowhighstatus

这几个字段组成
在本次代码中选择type=p
这样对应的number属于0-2047
故以上SQL语句限制number为2047 超过该范围则无法显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值