2017-10-13 3 views
-1

J'ai des numéros en séquence stockés dans la base de données qui sont stockés sous forme de texte et contiennent des zéros précédents.SQL Server - Recherche de numéros manquants dans une séquence où les nombres contiennent des zéros précédents

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

La requête doit trouver résultat suivant

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

Merci.

+0

Quelle est la plage de numéros que vous avez? Comment les nombres supérieurs à 100 sont-ils stockés? –

+0

Plus de 100 numéros sont stockés comme 100,101 etc et les nombres maximum est 9999 – sourabhgk

+0

Avez-vous essayé de mettre votre titre de question dans le moteur de recherche? – qxg

Répondre

2

Tout ce dont vous avez besoin est une séquence de tables de nombres (il y a déjà beaucoup d'implémentations dans SO), puis utilisez LEFT JOIN. Voir la requête ci-dessous: seq est la séquence du numéro de forme 1 à 9999 comme 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