Depending on the number of decimals, this may work:set nocount oncreate table #tmp (TheData varchar(32) not null)insert #tmp (TheData) values ('22.6.1')insert #tmp (TheData) values ('2.1.1')insert #tmp (TheData) values ('22.2.6') insert #tmp (TheData) values ('22.2.10.2') insert #tmp (TheData) values ('22.2.10') print '** Not sorted correctly **'select * from #tmp order by TheDataprint ''print '** Sorted correctly **'select TheData from #tmporder by case when PARSENAME(TheData, 4) is nullthen REPLICATE('0', 3 - LEN(PARSENAME(TheData, 3))) + PARSENAME(TheData, 3) + REPLICATE('0', 3 - LEN(PARSENAME(TheData, 2))) + PARSENAME(TheData, 2) + REPLICATE('0', 3 - LEN(PARSENAME(TheData, 1))) + PARSENAME(TheData, 1) + '.000'else REPLICATE('0', 3 - LEN(PARSENAME(TheData, 4))) + PARSENAME(TheData, 4) + REPLICATE('0', 3 - LEN(PARSENAME(TheData, 3))) + PARSENAME(TheData, 3) + REPLICATE('0', 3 - LEN(PARSENAME(TheData, 2))) + PARSENAME(TheData, 2) + REPLICATE('0', 3 - LEN(PARSENAME(TheData, 1))) + PARSENAME(TheData, 1)enddrop table #tmp/* here are the results */** Not sorted correctly **TheData -------------------------------- 2.1.122.2.1022.2.10.222.2.622.6.1 ** Sorted correctly **TheData -------------------------------- 2.1.122.2.622.2.1022.2.10.222.6.1