在Sql Server 2008中订购十进制值

alk*_*nde 2 sql-server

我有一个包含varchar数据类型列的表.它中的数据类似于8.1,8.2,8.3,8.1.1,8.3.1,8.10,8.12,8.1.2等.我想订购这些数据,如

8.1
8.1.1
8.1.2
8.2
8.3
8.3.1
8.10
8.12.
Run Code Online (Sandbox Code Playgroud)

我已经尝试过以下方法:

SELECT LEN(COL)AS SORT,COL FROM #TEMP ORDER BY LEN(COL),COL
Run Code Online (Sandbox Code Playgroud)

这给了我喜欢的外观

8.1
8.2
8.3
8.10
8.12
8.1.1
8.1.2
8.3.1
Run Code Online (Sandbox Code Playgroud)

非常感谢帮助!

pra*_*een 6

表示的值类似于 Hierarchy.因此,首先将值转换为层次结构,然后执行排序操作

SELECT LEN(COL)AS SORT,COL FROM #TEMP
Order by convert(hierarchyID,'/' + [Col] + '/')
Run Code Online (Sandbox Code Playgroud)

在层次结构中,每个级别的区别/基本上将父级与子级别分开

SQL FIDDLE DEMO