在网上看到一个问题:http://topic.csdn.net/u/20110111/09/f045e687-96b1-429f-ada5-634a7e8f956b.html?83345
如何查询出某两个序号之间(比如001--100)缺少的那些序号。使用SQL的EXCEPT集合运算,解决方法,请参考下面例子:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
IF
OBJECT_ID
(
'
#t
'
)
IS
NOT
NULL
DROP
TABLE
#t
GO
-- 创建一个临时表
CREATE TABLE #t
(
Number NVARCHAR ( 20 )
)
-- 填充001至100个序号进入这个临时表中
DECLARE @i INT = 1
WHILE @i <= 100 -- 最大的序号
BEGIN
-- 使用REPLICATE函数,指定的次数(3)复制字符串值
DECLARE @v NVARCHAR ( 20 ) = RIGHT ( REPLICATE ( ' 0 ' , 3 ) + CAST ( @i AS NVARCHAR ( 20 )), 3 )
INSERT INTO #t ( [ Number ] ) VALUES ( @v )
SET @i = @i + 1
END
-- 最关键是下面这个EXCEPT(差集)运算
SELECT [ Number ] FROM #t
EXCEPT
SELECT [ 序号 ] FROM [ dbo ] . [ ta ]
GO
-- 创建一个临时表
CREATE TABLE #t
(
Number NVARCHAR ( 20 )
)
-- 填充001至100个序号进入这个临时表中
DECLARE @i INT = 1
WHILE @i <= 100 -- 最大的序号
BEGIN
-- 使用REPLICATE函数,指定的次数(3)复制字符串值
DECLARE @v NVARCHAR ( 20 ) = RIGHT ( REPLICATE ( ' 0 ' , 3 ) + CAST ( @i AS NVARCHAR ( 20 )), 3 )
INSERT INTO #t ( [ Number ] ) VALUES ( @v )
SET @i = @i + 1
END
-- 最关键是下面这个EXCEPT(差集)运算
SELECT [ Number ] FROM #t
EXCEPT
SELECT [ 序号 ] FROM [ dbo ] . [ ta ]
执得结果: