在Sql Server 2008中订购十进制值

时间:2014-02-11 06:49:24

标签: 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.

我已经尝试了以下内容:

SELECT LEN(COL)AS SORT,COL FROM #TEMP ORDER BY LEN(COL),COL

这让我像

一样出局
8.1
8.2
8.3
8.10
8.12
8.1.1
8.1.2
8.3.1

非常感谢帮助!!!

2 个答案:

答案 0 :(得分:6)

表示的值类似于Hierarchy。首先将值转换为hierarchy,然后执行排序操作

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

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

分开

SQL FIDDLE DEMO

答案 1 :(得分:0)

declare @t table(col1 varchar(50))
insert into @t values('8.1'),('8.1.2'),('8.2'),('8.3'),('8.3.1'),('8.10'),('8.12'),('8.1.1')



SELECT *
FROM @t
ORDER BY CAST('/' + col1 + '/' AS HIERARCHYID)