Rendre les numéros de build sortingables

J'ai une série de numéros de build qui sont stockés en tant que VARCHAR:

BUILDID
15.40.417
16.40.11014
17.0.667
17.0.700
17.0.703
17.0.710
17.1.137
17.1.141
17.1.142
17.1.151
17.1.167
17.1.211
17.1.87
17.1.88
17.10.12
17.20.7
17.25.3
17.25.5
17.30.1

Nous trouvons le problème trop commun de ne pas utiliser de zéros en tête lors du sorting. J'ai pensé split les nombres et créer un BIGINT. Y a-t-il une meilleure façon de les sortinger?

J'ai fini par faire cette fonction:

-- ============================================= -- Author: Dan Andrews -- Create date: 4/19/2017 -- Description: Converts Build IDs (17.20.1) to INTs (17020001) -- ============================================= ALTER FUNCTION fn_BuildID2INT(@buildID VARCHAR(50)) RETURNS BIGINT AS BEGIN DECLARE @xml XML , @value BIGINT = 10000000000 , @total BIGINT = 0; SET @xml = CAST('<X>'+REPLACE(@buildID , '.' , '</X><X>')+'</X>' AS XML); SELECT @total+=C.value('.' , 'int')*@value , @value/=100000 FROM @xml.nodes('X') AS X(C); RETURN @total; END; GO GRANT EXECUTE ON fn_BuildID2INT TO public; 

Ce qui m'a donné ceci:

Val
150004000417
160004011014
170000000667
170000000700
170000000703
170000000710
170000100137
170000100141
170000100142
170000100151
170000100167
170000100211
170000100087
170000100088
170001000012
170002000007
170002500003
170002500005
170003000001

Mais … comme l'a souligné Martin Smith ici , ORDER BY CAST('/' + YourColumn + '/' AS HIERARCHYID) est encore meilleur.