select * from 表名
order by Convert(int,left(列名,charindex(‘.‘,列名+‘.‘)-1)) asc, 列名asc
charindex(‘.‘,列名) 查询第一个.(点)在第几位
charindex(‘.‘,列名+‘.‘) 给没有数据在最后面加个.(点) 这样可以让第一位没有小数点的数据也能查出来
left(列名,charindex(‘.‘,列名)) 查询小数点左面值
left(列名,charindex(‘.‘,列名+‘.‘)) 在所有值后面加个.
left(列名,charindex(‘.‘,列名+‘.‘)-1) 查询的值后面减少一位 就是把后面的点给去了
Convert(int,left(列名,charindex(‘.‘,列名+‘.‘)-1)) 取第一个小数点前面的值转成int类型
Convert(int,left(列名,charindex(‘.‘,列名+‘.‘)-1)) asc 取小数点前面的值转成int类型正排序 (但是现在排序有点不准)
Convert(int,left(列名,charindex(‘.‘,列名+‘.‘)-1)) asc, 列名asc 所以后面再用列名asc正排一下就完全可以了