2017-10-13 40 views
-1

我有数字按顺序存储在数据库中,它们存储为文本并包含前面的零。SQL Server - 按序列查找缺失数字,其中数字包含前面的零

Numbers 
------- 
001 
002 
003 
004 
006 
007 
010 
011 
------- 

查询应找到以下结果

Missing 
------- 
005 
008 
009 
------- 

感谢。

+0

你有多少数字?如何存储大于100的数字? –

+0

大于100的数字存储为100,101等,最大数量为9999 – sourabhgk

+0

您是否尝试将您的问题标题放入搜索引擎? – qxg

回答

2

所有你需要的是一个数字表序列(在SO中有很多实现),然后使用LEFT JOIN。见下面的查询:seq是数字形式1到9999的序列,作为int

;with seq as 
(
select top 9999 row_number() over(order by t1.number) as N 
from master..spt_values t1 
     cross join master..spt_values t2 

) 

SELECT RIGHT('000'+CAST(s.n AS VARCHAR(3)),3) as MissingNumbers 
from seq s 
left join yourtable t on s.n = cast(t.Number as int) 
where t.number is null 
相关问题