SQL 取出某个表序列号中不连续的数字
SQL来源 :https://bbs.csdn.net/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以上的数字辅助表,主要由
name | number | type | low | high | status |
---|
这几个字段组成
在本次代码中选择type=p
这样对应的number属于0-2047
故以上SQL语句限制number为2047 超过该范围则无法显示