На вашем месте я бы сделал хитрое выражение. Давайте предположим, что перед слешем у вас есть максимум 2 или 3 цифры. Если вы напишите:
order by case charindex('/', val)
when 0 then convert(int, val)
else convert(int, substr(val, 1, charindex('/', val) -1)
end * 1000
+ case charindex('/', val)
when 0 then 0
else convert(float, replace(substring(val, 1 + charindex('/', val),
length(val)), '-', '.'))
end
Если я ничего не набрал, следующее должно конвертировать 05 в 5000, 05/1 в 5001, 05 / 1-1 в 5001.1, и все должно сортироваться так, как вы хотите, при условии, что у вас всегда есть одна цифра в большинство после дефиса. В противном случае вы, вероятно, можете обойти это, разделив и добавив левое отступление с подходящим количеством нулей, но выражение станет намного более уродливым ...